C: alinhamento de estruturas de dados

Estou trabalhando com estruturas e tenho várias perguntas sobre elas. Pelo que entendi as variáveis ​​de estrutura serão colocadas na memória sequencialmente. O comprimento dos blocos (palavras) depende da arquitetura da máquina (32 bits - 4 bytes, 64 bits - 8 bytes).

Vamos dizer que temos duas estruturas de dados:

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

Na memória será:

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 |

Mas podemos reorganizá-lo, para que esses dados se encaixem na palavra da máquina. Como isso:

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

Neste caso, para 32 e 64 bits, ele será representado da mesma forma (16 bytes):

 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|

Eu tenho algumas perguntas:

É como um palpite, mas a regra principal parastruct é definir variáveis ​​com tamanho maior no início?Pelo que entendi, não está funcionando com variáveis ​​independentes. Gostarchar str[] = "Hello";?Preenchendo byte, que código tem? Está em algum lugar na mesa ASCII? Desculpe, não consegui encontrar.2 estruturas com todos os membros representados na memória por diferentes endereços e eles podem ser colocados não sequencialmente na memória?Essa estrutura:struct ST3 { char c1; char c2; char c3;} st3; Temsize = 3Eu entendo que, se adicionarmos um membro com outro tipo, ele será alinhado. Mas por que não está alinhado antes disso?

questionAnswers(5)

yourAnswerToTheQuestion