alinhamento std :: array

Tentando std::tr1::array em um mac eu estou recebendo 16 bytes de alinhamento.

 sizeof(int) = 4; sizeof( std::tr1::array ) = 16; sizeof( std::tr1::array ) = 16; sizeof( std::tr1::array ) = 32; 

Existe alguma coisa na STL que se comporta como matriz , mas é garantida para não se auto-completar, ou seja,

 sizeof( ARRAY ) = sizeof( T )*N 

O padrão manda que os elementos “sejam armazenados contiguamente, significando que se a é um array, então ele obedece à identidade & a [n] == & a [0] + n para todo 0 <= n

Tanto quanto eu sei, não há garantia de que sizeof (std :: array) = = sizeof (T) * N, mas a declaração de contiguidade afirma que os valores são armazenados apenas como em uma matriz C regular. Se você tem apenas um array de valores que precisam ser contíguos, você pode usar sizeof (T) * std :: array :: size () como tamanho e std :: array :: data () como o endereço inicial do arquivo. array.

Parece que os poucos dados que você deu como alocam memory para a potência mais próxima de dois. Conhecendo muito pouco os detalhes da arquitetura da CPU, posso supor que a alocação de tamanhos de potência de dois é mais rápida do que não preenchida, pelo menos em pequenas quantidades. Talvez você devesse ver o que acontece quando você tenta alocar algo muito maior?

Existe alguma razão pela qual você absolutamente precisa tirar os bytes extras do topo?

Desde postar, viro eu consigo o que eu quero trocar a configuração do IDE do padrão para ..

 LLVM compiler 3.0 Language: LLVM C++ standard library: =libc++ (LLVM standard library with c++0x support.) 

(CLANG_CXX_LIBRARY = libc ++) l

Anteriormente, a configuração era “libstdc ++ (biblioteca padrão gcc c ++)”, que parece ter o preenchimento, e isso me permitiu include vez de ; e agora

 sizeof(array)==sizeof(T)*N 

isso é tudo no Xcode 4.2 no mac osx lion. Eu estou esperando que um é simplesmente obsoleto e que esse comportamento é o que eu vou conseguir em outras plataformas?

std::array na verdade não é uma matriz, mas uma estrutura que contém uma matriz. É a estrutura que é preenchida, não a matriz. Os compiladores podem adicionar preenchimento ao final de uma estrutura sempre que desejarem.