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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BESSON_off
3 / 0 / 1
Регистрация: 08.07.2013
Сообщений: 344
#1

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

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

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

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

Выравнивание - C++
Почему не происходит выравнивание текста по правому края? int main() { cout.setf(ios::right); cout << "Right"; return 0;...

Не получается выравнивание - C++
Здравствуйте, форумчане! Я вот уже второй день не могу выполнить такую задачу (см. прикрепленный файл). Мой код: #include <stdio.h> ...

Выравнивание вывода - C++
Как отредактировать вывод, чтобы выводило примерно как на скриншоте ? #include <iostream> #include <fstream> #include <io.h> ...

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

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

Выравнивание данных - C++
Итак, как всем известно, обычно тип double занимает 8 байт. Тип char занимает 1 байт (char - 9 байт). Структура вида: struct A { ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
12.04.2014, 19:54 #2
Выколупываеие соответствующих битов может занять существенно большее время,
чем чтение отдельного 32 битного слова,
а поскольку сейчас памяти имеется немереное количество, то лучше использовать
под каждый параметр отдельное слово.
0
DrOffset
7147 / 4288 / 966
Регистрация: 30.01.2014
Сообщений: 7,091
13.04.2014, 04:10 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
BESSON_off, на современных процессорах всякие предположения о количестве тактов могут оказаться ложными. Современные x86 процессоры могут выполнять инструкции не в том порядке, в котором они расположены в памяти, и могут параллельно выполнять несколько инструкций. А из-за кешируемости кода и данных выполнение одного и того же кода может занимать разное количество времени. То есть на глаз определить как в старые добрые времена количество тактов на участке кода не представляется возможным.

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

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

Выравнивание структур - C++
Подскажите пожалуйста, как в Си++ задать структуру/класс/тип данных, чтобы она/её поля были выровнены на одределённую границу в памяти,...

Выравнивание матрицы - C++
Доброго времени суток. Хотелось бы узнать, как сделать чтобы из этого: http://joxi.ru/fA9RUtg5CbDUc_0TDm0 получилось это ...

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

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


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

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

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