アライメント
アライメント(alignment)
CPUによってはアライメントに寛容だったり厳しかったりする
C++11にはaligned_alloc()がある C言語のchar、short、int、long、long long、doubleのアライメントについて
char型は1バイト、アライメントは1バイト
short型は2バイト、アライメントは2バイト
int型は4バイト、アライメントは4バイト
long型は4バイト、アライメントは4バイト
long long型は4バイト、アライメントは4バイト
double型は4バイト、アライメントは4バイト
char型のアライメントは1バイト
short型のアライメントは2バイト
int型のアライメントは4バイト
long型のアライメントは8バイト
long long型のアライメントは8バイト
double型のアライメントは8バイト
関連
確認用
Q. アライメントとは
Q. アライン
Q. なぜアライメントが必要なのか
Q. データ整列
Q. メモリアライメント
Q. 64ビットCPUは[]バイトアライメント
Q. データ構造パディング
Q. アライメントを守るとは
Q. アライメントを調整するとは
Q. 構造体を宣言したときどんな風にメモリ上に配置されるか
Q. アライメントの例
Q. ワード境界
Q. キャッシュライン境界
Q. データアライメント
参考
パディングの計算方法
code:memo
padding = (align - (offset mod align)) mod align
aligned = offset + padding
= offset + ((align - (offset mod align)) mod align)
最近のコンピュータはバイトマシンらしい
アライメントは、何バイト境界にアラインすればよいか
アラインメントは CPU のハードウェアに起因する問題であり, データのメモリアドレスに関する制約である.
・基本的にプリミティブ型の変数は、そのデータ型のサイズのアライメントを持つ。(ただし、このサイズがデータバスより大きい場合はデータバスのサイズになることが多い。例えば、僕の32bit環境の8byteであるdoubleのアライメントは4byteだった。)
・配列や構造体といった集成体型のアライメントは、そのデータ型が持つメンバの中で最も大きなアライメントを持つものと等しくなる。
・集成体型の各メンバのアライメントは、そのメンバ自身のアライメントに等しくなる。(要素が構造体の場合は、構造体の中の一番大きなアライメントを持つメンバのアライメントに等しくなる。)
・sizeof(配列) / sizeof(配列を構成している要素)としたときに、配列の要素数を得るために構造体の最後にパティングが挿入される場合がある。
メモ