C: Dostosowanie struktur danych

Pracuję ze strukturami i mam kilka pytań na ich temat. Jak rozumiem, zmienne struktury będą umieszczane kolejno w pamięci. Długość bloków (słów) zależy od architektury maszyny (32 bity - 4 bajty, 64 bity - 8 bajtów).

Powiedzmy, że mamy 2 struktury danych:

struct ST1 {
    char c1;
    short s;
    char c2;
    double d;
    int i;
};

W pamięci będzie to:

32 bit - 20 bytes    
 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
------------------------------------------------------------------------------------------
 c1| PB| s | s | c1| PB| PB| PB| d | d | d  | d  | d  | d  | d  | d  | i  | i  | i  | i  |

64 bit - 24 bytes    | 20 | 21 | 22 | 23 |
previous sequence +  ---------------------
                     | PB | PB | PB | PB |

Ale możemy to zmienić, aby dane pasowały do ​​słowa maszynowego. Lubię to:

struct ST2 {
    double d;
    int i;
    short s;
    char c1;
    char c2;
};

W tym przypadku dla 32 i 64 bitów będzie reprezentowany w ten sam sposób (16 bajtów):

 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
----------------------------------------------------------------------
 d | d | d | d | d | d | d | d | i | i | i  | i  | s  | s  | ch1| ch2|

Mam kilka pytań:

To jak dzikie zgadywanie, ale główna zasadastruct czy na początku definiujesz zmienne o większym rozmiarze?Jak rozumiem, nie działa z autonomicznymi zmiennymi. Lubićchar str[] = "Hello";?Bajt wypełniający, jaki ma kod? Czy to gdzieś w tabeli ASCII? Przepraszamy, nie mogłem go znaleźć.2 struktury, w których wszyscy członkowie są reprezentowani w pamięci pod różnymi adresami i mogą być umieszczani kolejno w pamięci?Taka struktura:struct ST3 { char c1; char c2; char c3;} st3; Masize = 3, Rozumiem, że jeśli dodamy do niego członka o innym typie, zostanie on wyrównany. Ale dlaczego nie jest wcześniej dopasowany?

questionAnswers(5)

yourAnswerToTheQuestion