Szukaj…


Wprowadzenie

Kompilator GNU C zawiera kilka ciekawych funkcji, które nie są określone przez standardy C. Te rozszerzenia są szeroko stosowane w oprogramowaniu systemowym i są doskonałym narzędziem do optymalizacji wydajności.

Atrybut zapakowany

spakowany jest zmiennym atrybutem używanym ze strukturami i związkami w celu zminimalizowania wymagań pamięci.

#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;
}

W moim 64-bitowym systemie Linux

  • Rozmiar struct foo = 8 bajtów
  • Rozmiar struct foo_packed = 5 bajtów

Atrybut spakowany ogranicza wypełnianie struktury, które kompilator wykonuje w celu utrzymania wyrównania pamięci.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow