"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como o alinhamento da memória afeta o tamanho das estruturas C?

Como o alinhamento da memória afeta o tamanho das estruturas C?

Publicado em 2024-11-07
Navegar:407

How Does Memory Alignment Affect the Size of C Structures?

Alinhamento de memória em estruturas C

Ao trabalhar com estruturas C, compreender o alinhamento de memória é crucial. O alinhamento da memória refere-se ao posicionamento de dados na memória em limites específicos. Em uma máquina de 32 bits, a memória normalmente é alinhada em limites de 4 bytes.

Alinhamento de memória para estruturas

Considere a seguinte estrutura:

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
} myStruct;

Cada short não assinado ocupa 2 bytes. Em teoria, o tamanho do myStruct deveria ser 2 * 3 = 6 bytes. No entanto, o alinhamento da memória pode afetar o tamanho real.

Nesse caso, myStruct está alinhado a um limite de 2 bytes, pois o maior membro de dados é unsigned short, que tem 2 bytes. Portanto, nenhum preenchimento é necessário entre os membros, e o tamanho de myStruct permanece 6 bytes.

Padding for Structures

Agora considere esta estrutura modificada:

typedef struct {
    unsigned short v1;
    unsigned short v2;
    unsigned short v3;
    int i;
} myStruct;

Adicionar um membro int altera o tamanho e o alinhamento da estrutura. int tem 4 bytes, então o alinhamento de myStruct é arredondado para 4 bytes.

Para alinhar corretamente, 2 bytes de preenchimento são inseridos entre v3 e i. Isso resulta em um tamanho total de 6 2 4 = 12 bytes para myStruct.

Conclusão

O alinhamento da memória garante que os dados sejam colocados de forma eficiente na memória. Os requisitos de alinhamento baseiam-se no tamanho do maior membro de dados da estrutura. Compreender esses princípios é essencial para otimizar o uso da memória e manter a eficiência do código.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3