メモリアライメント

提供: MonoBook
ナビゲーションに移動 検索に移動

メモリアライメントとは、あるコンピューターにおいてデータメモリの特定の位置(通称は特定のバイト境界)に配置されるべきであるという要件、たとえば「int型が格納されるメモリのアドレスは4で割り切れること」などといった仕様を指します。

この要件はコンピューターOSミドルウェアライブラリなどにより異なります。

なお、昨今のパソコンなどではメモリアライメントをプログラマーがまったく意識しなくても勝手にうまいことやってくれるものがほとんどです。一方でプログラマブルシェーダーでは勝手にやってくれないものがほとんどです。

昨今のパソコンCPUでは4バイト境界が主流であり、ビデオカードGPUでは16バイト境界が主流です。

メモリパディング[編集 | ソースを編集]

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

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

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

関連項目[編集 | ソースを編集]