C++ · Avançado · Português · Técnico
alinhamento de memória
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); // 8Exemplos
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