C++

О блоге

Рейтинг
6.11
голосов: 4
Практика программирования на C++. Методы, советы, секреты…

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (1)

C++

POD типы в C++

POD типы в языке C++ это аббревиатура от “Plain Old Data”, что можно трактовать как «Простые данные в стиле C».


Читать дальше
C++

Паттерн Singleton в C++. Неуверенное Да, или категорическое Нет? Часть 2

Луч света в темном царстве...


Все вышеописанное — это особенности объектного программирования в С++ и против них не пойти… Если только не использовать объекта вообще. А что? Мы же хотим сделать статическую функциональность, зачем тут объект? Нам не нужно наследование от этого объекта, нам не нужны коллекции этих объектов, а нужна только функциональность. Заменим класс синглетон следующим кодом:


Читать дальше
C++

Паттерн Singleton в C++. Неуверенное Да, или категорическое Нет? Часть 1

Это будет статья о преимуществах и недостатках паттерна Singleton в языке C++. До недавнего времени я пользовался подобными объектами постоянно. Если мне нужно было сделать какую то систему, с которой другой код мог бы работать, то я использовал именно его. Однако, в какой то момент я увидел всю несостоятельность этого паттерна для языка С++. В этой статье я хочу рассказать об этом и предложить более удобный и быстрый способ в работе способ организации кода.


Читать дальше
C++

Тест на быстродействие: Hash Map vs Vector

Задача: определить контейнер, в котором оптимальнее всего хранить данные (текстуры, буферы и т.п.). Сравним наиболее подходящие варианты: сортированный массив и Hash Map.
Условие: контейнер один раз заполняется, а затем с ним ведется работа. (т.е. не рассматривается вариант изменения содержимого контейнера в реальном времени)
Критерий:
1. Скорость заполнения
2. Скорость выборки
Данные: поскольку задача поиска, то в качестве данных используются целые числа. Если требуется хранить структуры, то это повлияет только на скорость заполнения массива, но не время поиска данных. Ключ всегда лучше получать как хеш по данным или уникальное поле данных в структуре.


Читать дальше
C++

Как избавится от vcredist'a

При работе с Microsoft Visual Studio C++ возникает проблема распространения приложения. Для запуска оно требует некоторые CRT библиотеки, которые можно установить вместе с vcredist'ом. Данная статья покажет как настроить приложение, чтобы оно не требовало дополнительной установки.


Читать дальше
C++

Оптимизация кода на С++

Иногда бывает сложно решить, какую конструкцию лучше использовать i++ или ++i, либо выбрать между конструкцией if-else и switch. В этой статье, написанной специально для сообщества iT works, представлены наиболее реальные средства оптимизации кода, которые должен знать каждый профессиональный программист.

Некоторые считают, что времена оптимизации на уровне кода прошли навсегда, однако это не так. Сейчас существует множество платформ в которых нет таких могущественных компиляторов как в Microsoft Visual Studio. Например шейдерные языки (hlsl, glsl) или код для CUDA, PlayStation3, SPU или мобильные платформы. В зависимости от организации кода, может в десятки раз отличаться его эффективность иногда из-за неэффективности компилятора, на чаще из-за доступа к памяти.

Программируя для разных платформ изучите возможности вашего компилятора и особенности архитектуры процессора (если вы пишите для конкретной консоли). Проведите тесты производительности разных вариантов оптимизации. Часто сложно предполагать, какие именно способы будут наиболее эффективными. А эта статья подскажет разные приемы, которые могут вам помочь. Однако не следует оптимизировать слепо, без предварительного анализа и профилирования. Помните, что преждевременная оптимизация — это зло.

Если вы являетесь программистом в VS под Windows, то скорее всего со многими описанными приемами оптимизации компилятор эффективно справится. Обратите внимание на пункты работы с памятью, а так же я рекомендую ознакомиться с техникой Data oriented design. Некоторые советы по ее использования ищите в статье Методы оптимизации памяти.

Итак, начнем:

1. Используйте векторизацию данных и векторные команды их обработки (например SSE в CPU или упаковывайте данные если используете шейдеры или CUDA). Это позволит использовать SIMD (Single Instruction, Multiple Data) архитектуру, что значительно повысит скорость вычислений. Если вы решите использовать этот метод, то не забывайте про выравнивание данных в памяти.


Читать дальше

Warning: Unknown: write failed: No space left on device (28) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php5) in Unknown on line 0