ExpertiDict

C++ · Avançado · Português · Técnico

alinhamento de memória

alĩɲaˈmẽtu dʒi meˈmɔɾiasubstantivo

Exigência de que um objeto fique em um endereço múltiplo de certo valor, dado por alignof. O compilador insere padding entre os membros de uma struct para respeitá-lo.

Onde usar

Explica por que o sizeof de uma struct é maior que a soma dos campos e por que ordenar os membros do maior para o menor reduz o tamanho. Também importa para SIMD e, com alignas, para evitar false sharing.

Em código

struct A { char c; double d; char e; };
struct B { double d; char c; char e; };
std::cout << sizeof(A);        // 24 (típico)
std::cout << sizeof(B);        // 16 (típico)
std::cout << alignof(double);  // 8

Exemplos

O padding dessa struct dobra o tamanho, reordene os campos.

Use alignas(32) para alinhar esse buffer para SIMD.

Cuidado

Acessar memória desalinhada pode ser lento ou até travar em algumas arquiteturas; em C++, forçar um ponteiro desalinhado é comportamento indefinido.

Sinônimos

alignment

Veja também

Todos os termos de C++