2

最近、コードを調べていたときに、#pragma DATA_ALIGN(var、4 * 1024)を見つけました。varは、約20kの長さの構造変数です。私はこれをインターネットで検索しましたが、有用なものは何も見つかりませんでした。誰かが私にリンクを提供したり、これに光を当てたりできますか?

4

2 に答える 2

10

これは、var構造がページアラインされることを意味します(ほとんどのコンピュータアーキテクチャの標準ページサイズは4K = 4096バイトです)。つまり、アドレスを4096で割り切れる場所に格納されます。このようなアプローチでは、OSがデータをチャンクで取得するため、パフォーマンスが向上します。とpaged memory呼ばれることを実行することにより、ディスク(つまり)からのページサイズに等しくなりますpage fault。それぞれpage faultがプロセッサとI/Oシステムの追加作業です。の数を最小限に抑えることpage faultsは、パフォーマンスを向上させるための強力な手段です。データがページアラインされていない場合、データへのアクセスには追加のが必要になる場合がありますpage faultが、持ち込まれたデータの一部のみが必要です。

編集:ほとんどの場合、4Kへの調整はメモリ管理によるものですが、@ CodePaintersによって正しく指摘されているように、調整には他の理由、主にHWの制限がある可能性があります。

于 2012-11-29T08:12:52.560 に答える
2

#pragmaディレクティブは、CおよびC ++言語との全体的な互換性を維持しながら、各コンパイラがマシンおよびオペレーティングシステム固有の機能を提供する方法を提供します。プラグマは、定義上、マシンまたはオペレーティングシステムに固有であり、通常、コンパイラごとに異なります。

http://www.songho.ca/misc/alignment/dataalign.htmlがデータアライメントの理解に役立つと思います。&あなたが言っているように、varは約20kのサイズの構造体であり、この構造体に割り当てられたメモリはページ整列として整列されます&@icepackの答えはそれを説明しています。

于 2012-11-29T08:22:56.867 に答える