Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
BESSON_off
3 / 0 / 7
Регистрация: 08.07.2013
Сообщений: 351
#1

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

12.04.2014, 19:42. Просмотров 547. Ответов 2
Метки нет (Все метки)

Насколько я понимаю разрядность системы определяет размер машинного слова. Допустим, я использую Win7 x32, получается, что за 1 такт процессор обрабатывает 4 байта информации поступившей на регистр.
Что нам это дает? Получается, если мы создаем систему, которой нужна высокая производительность, то помимо всего прочего (профилирование, оптимизация циклов и т.п.) нужно все используемые в программе пользовательские типы оптимизировать. Т.е. если у нас есть класс, «Человек», который содержит поля «Возраст», «Кол. Рук», «Кол. Ног», то вместо использования какого-нибудь int, для определения этих полей, которые, при своем создании займут 3 такта (int == 4 байта), нужно использовать, например, контейнер bitset, который будет использовать под возраст 8 бит и для остальных двух полей по 2 бита, что при создании объекта класса займет 1 такт.
http://www.cyberforum.ru/cpp-beginners/thread1736486.html

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

Выравнивание данных
Итак, как всем известно, обычно тип double занимает 8 байт. Тип char занимает 1...

Выравнивание текста
Как мне выравнить текст в этом коде, как показано на рисунке ? cout<<"Едем...

Выравнивание матрицы
Доброго времени суток. Хотелось бы узнать, как сделать чтобы из этого:...

Выравнивание структур
typedef struct _WinBMPFileHeader { WORD FileType; ...

Выравнивание столбцов
Подскажите, пожалуйста, как вывести ответы в ровные столбцы. Получается только...

2
zss
Модератор
Эксперт С++
6952 / 6514 / 4135
Регистрация: 18.12.2011
Сообщений: 17,179
Завершенные тесты: 1
12.04.2014, 19:54 #2
Выколупываеие соответствующих битов может занять существенно большее время,
чем чтение отдельного 32 битного слова,
а поскольку сейчас памяти имеется немереное количество, то лучше использовать
под каждый параметр отдельное слово.
0
DrOffset
7517 / 4513 / 1097
Регистрация: 30.01.2014
Сообщений: 7,362
13.04.2014, 04:10 #3
Лучший ответ Сообщение было отмечено IrineK как решение

Решение

BESSON_off, на современных процессорах всякие предположения о количестве тактов могут оказаться ложными. Современные x86 процессоры могут выполнять инструкции не в том порядке, в котором они расположены в памяти, и могут параллельно выполнять несколько инструкций. А из-за кешируемости кода и данных выполнение одного и того же кода может занимать разное количество времени. То есть на глаз определить как в старые добрые времена количество тактов на участке кода не представляется возможным.

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

Так что о тактах и выигрыше в байтах можно говорить только, если мы разрабатываем embedded софт (да и то не всегда).
3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2014, 04:10
Привет! Вот еще темы с решениями:

SSE2, выравнивание и new
Потихонечку пишу свою длинную арифметку. И вот на этапе оптимизации мне нужно...

Выравнивание строки
Помогите пожалуйста написать функцию, которая выравнивает строку по левому краю...

Выравнивание структур
Подскажите пожалуйста, как в Си++ задать структуру/класс/тип данных, чтобы...

Выравнивание вывода
Как отредактировать вывод, чтобы выводило примерно как на скриншоте ? ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru