C: alineación de estructuras de datos

Estoy trabajando con estructuras y tengo varias preguntas sobre ellas. Según entiendo, las variables de estructura se colocarán en la memoria secuencialmente. La longitud de los bloques (palabras) depende de la arquitectura de la máquina (32 bits - 4 bytes, 64 bits - 8 bytes).

Digamos que tenemos 2 estructuras de datos:

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

En la memoria 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 |

Pero podemos reorganizarlo, para hacer que estos datos se ajusten a la palabra máquina. Me gusta esto:

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

En este caso, tanto para 32 como para 64 bits, se representará de la misma manera (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|

Tengo un par de preguntas:

Es como una suposición salvaje, pero la regla principal parastruct ¿Es definir variables con mayor tamaño al principio?Según tengo entendido, no funciona con variables independientes. Me gustachar str[] = "Hello";?Byte de relleno, ¿qué código tiene? ¿Está en algún lugar de la mesa ASCII? Lo siento, no pude encontrarlo.¿2 estructuras con todos los miembros representados en la memoria por direcciones diferentes y se pueden colocar no secuencialmente en la memoria?Tal estructura:struct ST3 { char c1; char c2; char c3;} st3; Tienesize = 3, Entiendo que si agregamos un miembro con otro tipo en él, se alineará. Pero, ¿por qué no está alineado antes?

Respuestas a la pregunta(5)

Su respuesta a la pregunta