2012-01-24 3 views
0

В c/C++, как упорядочивание переменных с разными типами данных влияет на размер кода?Типы данных - порядок и размер кода

Пример, который я видел, включает 4 структуры с 4 переменными. Переменные были типа int, char, float и BYTE; каждая из структур имела одинаковое количество переменных (т. е. 4) и была названа одинаковой в каждой структуре. Единственным отличием был порядок переменных.

Я понимаю, что integer, char и float имеют разные размеры (т. Е. Int 4 байта и т. Д.), Но как макет этих типов влияет на размер кода.

Заранее благодарен!

+0

Вы имеете в виду размер исполняемого файла или размер структуры в памяти? – mkb

+0

это из-за прокладки .... структура дополняется, чтобы оптимизировать чтение ... так как чтение всегда 4 байта (32-битная система) ... поэтому он пытается оптимизировать, добавляя некоторые дополнения ... вы можете удалить дополнение с помощью макроса #pragma (но лучше всего выровнять ваши элементы так, чтобы отступы были как можно меньше) ... –

+0

@ mkb В примере указан только наименьший размер кода? – user1167501

ответ

0

Не вдаваясь в специфические для компилятора варианты для прокладки структуры, лучшим советом является размещение больших элементов в передней части структуры и работа по пути вниз. В вашем примере я бы заказал им float, int, BYTE и char.

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

+0

Спасибо, Марк! Я не хочу звучать глупо; потому что теперь я понимаю, что это относится к структурам, но делает ли это выравнивание типов также применимым в объявлении класса i.e, осуществляющего размер исполняемого файла? – user1167501

+0

@ user1167501, единственная разница между структурой и классом в C++ - права доступа по умолчанию, public vs. private. Влияние на размер исполняемого файла будет минимальным в любом случае, единственный раз, когда вы заметите, это когда вы создаете огромный массив из них, и они будут только частью исполняемого файла, если они статичны. –

Смежные вопросы