メインメニューを開く

差分

メモリアライメント

1,557 バイト追加, 2023年12月12日 (火) 03:01
ページの作成:「'''メモリアライメント'''とは、データがメモリの特定の位置(通称は特定のバイト境界)に配置されるべきであるという要件…」
'''メモリアライメント'''とは、データがメモリの特定の位置(通称は特定のバイト境界)に配置されるべきであるという要件を指します。

例えば、4バイトの整数は4バイト境界、つまりアドレスが4で割り切れる位置に配置されるべきです。

メモリアライメントを調整するために無駄なデータ(ダミー変数)を挿入することを「メモリパディング」といいます。例えば4バイト境界の場合、<code>char</code>(1バイト)の後に<code>int</code>(4バイト)が来る場合、<code>char</code>の後に3バイトの無駄なデータ(パディング)を挿入します。これにより、<code>int</code>が4バイト境界に配置されます。

一般的にメモリアライメントが正しいとメモリアクセスが高速になりシステム全体のパフォーマンスが向上します。逆を言えばメモリアライメントが無茶苦茶だとアドレス計算のためにパフォーマンスは低下します。

なお、メモリアライメントが正しくないと低速化するどころか正常に動かないシステムも存在します。正しく動かないシステムとしては[[Direct3D]]や[[Vulkan]]などのグラフィックAPIが有名です。これらは[[頂点バッファ]]などのメモリアライメントが正しくないと正常に動きません。なお、[[Apple]]の[[Metal]]はメモリアライメントが無茶苦茶でも動きます。