「メモリアライメント」を編集中
ナビゲーションに移動
検索に移動
この編集を取り消せます。 下記の差分を確認して、本当に取り消していいか検証してください。よろしければ変更を保存して取り消しを完了してください。
最新版 | 編集中の文章 | ||
1行目: | 1行目: | ||
− | '''メモリアライメント''' | + | '''メモリアライメント'''とは、[[データ]]が[[メモリ]]の特定の位置(通称は特定のバイト境界)に配置されるべきであるという要件を指します。 |
− | この要件は[[コンピューター]]や[[OS]]、[[ミドルウェア]]、[[ライブラリ]] | + | この要件は[[コンピューター]]や[[OS]]、[[ミドルウェア]]、[[ライブラリ]]などにより異なります。昨今ではメモリアライメントを[[プログラマー]]がまったく意識しなくても良い環境も存在します。 |
− | |||
− | + | 例えば、4バイトの整数は4バイト境界、つまりアドレスが4で割り切れる位置に配置されるべきです。 | |
+ | アライメントの数字はシステムにより異なります。昨今の[[パソコン]]では4バイト境界が主流であり、[[ビデオカード]]では16バイト境界が主流です。 | ||
− | |||
メモリアライメントを調整するために無駄なデータ(や構造体にダミー変数)を挿入することを「メモリパディング」といいます。例えば4バイト境界の場合、<code>char</code>(1バイト)の後に<code>int</code>(4バイト)が来る場合、<code>char</code>の後に3バイトの無駄なデータ(パディング)を挿入します。これにより、<code>int</code>が4バイト境界に配置されます。 | メモリアライメントを調整するために無駄なデータ(や構造体にダミー変数)を挿入することを「メモリパディング」といいます。例えば4バイト境界の場合、<code>char</code>(1バイト)の後に<code>int</code>(4バイト)が来る場合、<code>char</code>の後に3バイトの無駄なデータ(パディング)を挿入します。これにより、<code>int</code>が4バイト境界に配置されます。 | ||
13行目: | 12行目: | ||
なお、メモリアライメントが正しくないと低速化するどころか正常に動かないシステムも存在します。正しく動かないシステムとしては[[Direct3D]]や[[Vulkan]]などのグラフィックAPIが有名です。これらは[[頂点バッファ]]などのメモリアライメントが正しくないと正常に動きません。なお、[[Apple]]の[[Metal]]はメモリアライメントが無茶苦茶でも動きます。 | なお、メモリアライメントが正しくないと低速化するどころか正常に動かないシステムも存在します。正しく動かないシステムとしては[[Direct3D]]や[[Vulkan]]などのグラフィックAPIが有名です。これらは[[頂点バッファ]]などのメモリアライメントが正しくないと正常に動きません。なお、[[Apple]]の[[Metal]]はメモリアライメントが無茶苦茶でも動きます。 | ||
− | |||
− | |||
− |