Поиск…


Вступление

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

Атрибут упакован

упакованный - это переменный атрибут, который используется со структурами и объединениями, чтобы минимизировать требования к памяти.

#include <stdio.h>
struct foo {
    int a;
    char c;
};

struct __attribute__((__packed__))foo_packed {
    int a;
    char c;
};

int main()
{
    printf("Size of foo: %d\n", sizeof(struct foo));
    printf("Size of packed foo: %d\n", sizeof(struct foo_packed));
    return 0;
}

На моем 64-битном Linux,

  • Размер struct foo = 8 байт
  • Размер struct foo_packed = 5 байт

упакованный атрибут препятствует заполнению структуры, которую выполняет компилятор для поддержания выравнивания памяти.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow