поведение крошечных структур C ++ - PullRequest
6 голосов
/ 04 марта 2011

Если я определю структуру наподобие:

struct tiny
{
    long t;
};

будет ли он обрабатываться как long с точки зрения аргументов функции и тому подобное, в примере будет параметр:

void myfunc(tiny x)
{ ... }

быть обработан как параметр long, фактически помещенный в стек?

Итак, по сути, является ли структура tiny такой же большой, как ее единственный член?

Спасибо

Ответы [ 3 ]

7 голосов
/ 04 марта 2011

Потребление памяти структурой - это, как минимум, сумма размеров памяти составляющих переменных.

Однако компилятор может добавить заполнение между переменными или в конце структуры, чтобы обеспечить правильное выравнивание данныхдля данной компьютерной архитектуры

7 голосов
/ 04 марта 2011

Нет гарантии, но, по крайней мере, с компиляторами, которые я посмотрел, это будет нормально, да.

0 голосов
/ 04 марта 2011

Если вы начнете добавлять виртуальные функции, он увеличится на 4 байта в большинстве систем / компиляторов (и дополнительно на 4 байта для каждого интерфейса, который вы включаете). Вообще говоря, структура должна иметь тот же размер, что и содержимое, если компилятор не добавил дополнительные отступы, как сказал Авив.

Посмотрите на #pragma pack (n) для проблем с упаковкой, по крайней мере, в Visual Studio ( Страница Microsoft на пакете pragma )

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