境界をあわせたメモリをスタックから確保する2011年02月03日 12時17分15秒

スタックからメモリを割り当てる時に境界を合わせるためのマクロ。reinterpret_cast を使っているから C++ 用になっているが、C のキャストで使える。

#define ALIGNED_CHAR_PTR_BY( name, type, size ) \
    type name ## _[ ( size + sizeof( type ) - 1 ) / sizeof( type ) ];\
    char* name = reinterpret_cast< char* >( name ## _ )

ネットワークなどの IPC を通して構造体をスタックに読み込んだ時に、スタックに一時領域として割り当てたメモリが必ずしも境界に合っているとは限らない。それを強制的に合わせるのに使う。構造体の中で一番大きい型を渡すか、単純にシステム上で一番大きい型を渡しても良い。

long 型に沿って最低 13 バイト割り当てる。


ALIGNED_CHAR_PTR_BY( long_aligned, long, 13 );

幾つかのアーキテクチャで試験はしたが、全てのアーキテクチャで絶対的に使えるのかは、自信がない。