Влияние оптимизации gcc на размер структуры - PullRequest
3 голосов
/ 03 октября 2011

Скажем, у меня есть большая структура, которая включает в себя другую структуру и т. Д. Изменится ли gcc -os или любой другой переключатель оптимизации gcc способом, которым он хранится в памяти? То есть Будет ли он упаковывать структуру, чтобы выжать немного дополнительного пространства?

спасибо,

Ответы [ 3 ]

4 голосов
/ 03 октября 2011

Нет, чтобы изменить собственное выравнивание платформы для структуры в gcc, вам придется явно использовать директивы компилятора __attribute__((packed)) или __attribute__((align X)) или другие gcc ключи командной строки, которые специально управляют компилятором изменить выравнивание собственной платформы для структур данных.

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

3 голосов
/ 03 октября 2011

Нет, этого не должно происходить - если у вас одинаковые параметры выравнивания и упаковки для всех ваших модулей кода, они должны работать правильно вместе, даже если скомпилированы с разными уровнями оптимизации,

0 голосов
/ 03 октября 2011

На самом деле, я вижу, как выравнивание структур (путем их заполнения) может привести к более короткому коду (без адресации между словами -> меньше нагрузки / запоминающих устройств)

-Os оптимизирует для двоичного размера (то есть чаще всего называют размером кода) не сжатие памяти

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...