Структура меняется в объеме памяти? - PullRequest
3 голосов
/ 23 июля 2011

Почему не 12 в первом случае?Проверено на: последних версиях gcc и clang, 64-битном Linux

struct desc
{
    int** parts;
    int nr;
};

sizeof(desc); Output: 16

struct desc
{
    int** parts;
};

sizeof(desc); Output: 8

struct desc
{
    int nr;
};

sizeof(desc); Output: 4

Ответы [ 2 ]

7 голосов
/ 23 июля 2011

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

Вы можете использовать offsetof, чтобы узнать, куда именно ваш компилятор добавляет отступы.1005 *

1 голос
/ 23 июля 2011

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

Заполнение находится в конце структуры и необходимо, чтобы каждый элемент в массиве struct desc все еще находился на 8-байтовой границе.

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