Форум программистов, компьютерный форум CyberForum.ru

Выравнивание - C++

Восстановить пароль Регистрация
 
BESSON_off
 Аватар для BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 331
12.04.2014, 19:42     Выравнивание #1
Насколько я понимаю разрядность системы определяет размер машинного слова. Допустим, я использую Win7 x32, получается, что за 1 такт процессор обрабатывает 4 байта информации поступившей на регистр.
Что нам это дает? Получается, если мы создаем систему, которой нужна высокая производительность, то помимо всего прочего (профилирование, оптимизация циклов и т.п.) нужно все используемые в программе пользовательские типы оптимизировать. Т.е. если у нас есть класс, «Человек», который содержит поля «Возраст», «Кол. Рук», «Кол. Ног», то вместо использования какого-нибудь int, для определения этих полей, которые, при своем создании займут 3 такта (int == 4 байта), нужно использовать, например, контейнер bitset, который будет использовать под возраст 8 бит и для остальных двух полей по 2 бита, что при создании объекта класса займет 1 такт.

Принцип выравнивания правильно понимаю?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2014, 19:42     Выравнивание
Посмотрите здесь:

Выравнивание строки C++
C++ выравнивание по ширине
C++ Выравнивание текста
C++ Выравнивание структур
Выравнивание данных C++
Выравнивание структур C++
C++ SSE2, выравнивание и new
C++ Выравнивание матрицы
C++ Не получается выравнивание
Выравнивание вывода C++
C++ Выравнивание столбцов
C++ Выравнивание

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6055 / 5658 / 1828
Регистрация: 18.12.2011
Сообщений: 14,452
Завершенные тесты: 1
12.04.2014, 19:54     Выравнивание #2
Выколупываеие соответствующих битов может занять существенно большее время,
чем чтение отдельного 32 битного слова,
а поскольку сейчас памяти имеется немереное количество, то лучше использовать
под каждый параметр отдельное слово.
DrOffset
6786 / 3997 / 917
Регистрация: 30.01.2014
Сообщений: 6,816
13.04.2014, 04:10     Выравнивание #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
BESSON_off, на современных процессорах всякие предположения о количестве тактов могут оказаться ложными. Современные x86 процессоры могут выполнять инструкции не в том порядке, в котором они расположены в памяти, и могут параллельно выполнять несколько инструкций. А из-за кешируемости кода и данных выполнение одного и того же кода может занимать разное количество времени. То есть на глаз определить как в старые добрые времена количество тактов на участке кода не представляется возможным.

Плюс к этому современные компиляторы, в отличие от рядового программиста, который вряд ли изучал многостраничные мануалы Intel, в курсе как надо оптимизировать код под современную архитектуру и возможно твои попытки что-то сократить ему только помешают, и код, который получится в результате будет сильно медленнее, чем мог бы.
Практика показывает, что самая лучшая оптимизация - алгоритмическая, учитывающая предметную область. Да и браться что-то оптимизировать, нужно только после профилирования. Как говорит Дональд Кнут - "Преждевременная оптимизация корень всех зол".

Так что о тактах и выигрыше в байтах можно говорить только, если мы разрабатываем embedded софт (да и то не всегда).
Yandex
Объявления
13.04.2014, 04:10     Выравнивание
Ответ Создать тему
Опции темы

Текущее время: 17:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru