C++11 からの alignas でアラインメントを調整2021年06月13日 12時25分43秒

C++11 から alignof でアラインメントを取得出来るようになった。取得するだけでは、片手落ち。同時に alignas も導入された。

実際に試してみる。

% cat alignas.cpp
// c++ -std=c++11
#include <iostream>

struct sse_t
{
    float sse_data[ 4 ];
};

struct alignas( 8 ) sse8_t
{
    float sse_data[ 4 ];
};

struct alignas( 16 ) sse16_t
{
    float sse_data[ 4 ];
};

struct alignas( 32 ) sse32_t
{
    float sse_data[ 4 ];
};

int main()
{
    std::cout << sizeof( sse_t ) << std::endl;
    std::cout << sizeof( sse8_t ) << std::endl;
    std::cout << sizeof( sse16_t ) << std::endl;
    std::cout << sizeof( sse32_t ) << std::endl;
}
実行結果。必要なアラインメント以下の数字を渡すと、無視されるようだ。まあ、必要なメモリサイズ以下には出来ない。
% c++ -std=c++11 alignas.cpp
% ./a.out 
16
16
16
32

前回