最近、コードを調べていたときに、#pragma DATA_ALIGN(var、4 * 1024)を見つけました。varは、約20kの長さの構造変数です。私はこれをインターネットで検索しましたが、有用なものは何も見つかりませんでした。誰かが私にリンクを提供したり、これに光を当てたりできますか?
2 に答える
これは、var
構造がページアラインされることを意味します(ほとんどのコンピュータアーキテクチャの標準ページサイズは4K = 4096バイトです)。つまり、アドレスを4096で割り切れる場所に格納されます。このようなアプローチでは、OSがデータをチャンクで取得するため、パフォーマンスが向上します。とpaged memory
呼ばれることを実行することにより、ディスク(つまり)からのページサイズに等しくなりますpage fault
。それぞれpage fault
がプロセッサとI/Oシステムの追加作業です。の数を最小限に抑えることpage faults
は、パフォーマンスを向上させるための強力な手段です。データがページアラインされていない場合、データへのアクセスには追加のが必要になる場合がありますpage fault
が、持ち込まれたデータの一部のみが必要です。
編集:ほとんどの場合、4Kへの調整はメモリ管理によるものですが、@ CodePaintersによって正しく指摘されているように、調整には他の理由、主にHWの制限がある可能性があります。
#pragmaディレクティブは、CおよびC ++言語との全体的な互換性を維持しながら、各コンパイラがマシンおよびオペレーティングシステム固有の機能を提供する方法を提供します。プラグマは、定義上、マシンまたはオペレーティングシステムに固有であり、通常、コンパイラごとに異なります。
http://www.songho.ca/misc/alignment/dataalign.htmlがデータアライメントの理解に役立つと思います。&あなたが言っているように、varは約20kのサイズの構造体であり、この構造体に割り当てられたメモリはページ整列として整列されます&@icepackの答えはそれを説明しています。