GCC Конечная структура
Я работаю над распределителем памяти. Каждый выделенный буфер начинается на 8-байтовой границе, и каждому предшествует заголовок для управления распределением (заголовок находится непосредственно перед 8-байтовым выровненным буфером).
Заголовок выглядит так:
struct header {
uint32_t hword32;
void *hpointer;
};
Предполагая, что все члены этой структуры упакованы и что указатель является 64-битным, эта структура имеет длину 12 байт, и выравнивание каждого элемента является правильным (поскольку конец структуры выровнен по 8 байтов).
Соответственно, я хотел бы сказать моему компилятору две вещи:
- Не добавляйте отступы между двумя членами структуры; а также
- Не беспокойтесь о выравнивании членов, они выровнены.
Как я могу сделать это с GCC?
Заманчиво использовать __attribute__((packed))
, Тем не менее, хотя это работает для 1., я понимаю, что оно не распространяется на 2. (то есть, это заставляет компилятор вставлять код для обработки невыровненного доступа, что здесь не нужно).