2010-06-02 21 views

Odpowiedz

7

Przeanalizujmy to.

We wszystkich przypadkach sizeof(char) == 1 i list tablica będzie miała trzech członków w miejscach pamięci list, list + 1 i list + 2.

Sytuacja z struct nie jest tak jednoznaczna. Standard gwarantuje, że członkowie będą przydzielani w rosnących lokalizacjach pamięci, ale nie będą przylegać. Kompilator może wprowadzać dopełnienie między elementami, a dopełnianie na końcu.

Dlatego s->a == 1 zawsze będzie prawdziwy. Jeśli implementacja powoduje, że unsigned char są w sąsiednich (i większość będzie), to inne równości będą musiały być prawdziwe.

Nawiasem mówiąc, wywołanie struct_struct może powodować problemy. Nazwa rozpoczynająca się od podkreślenia w globalnej przestrzeni nazw jest zarezerwowana dla implementacji.

4

Tak, będzie to zależało od wyrównania pamięci systemu i kompilatora oraz reguł pakowania.

+0

Czy tak, może przyjąć, że jest to jego przykład, czy tak, to zależy od architektury maszyny? –

+0

"Tak, to będzie zależało od systemu ..." –

+0

Myślałem, że endianness dotyczy tylko typów powyżej 1 bajtu, a ponieważ jest to struktura i nie są używane żadne związki lub większe typy, to czy byłbym bezpieczny? –

Powiązane problemy