私は64ビットカーネルを持っていて、ユーザーランドで32ビットプロセスを実行しています。ユーザープロセスコードで、64ビット変数を宣言した場合、どのように参照されますか。2回のメモリ読み取りが発生しますか。基本的なシナリオは次のとおりです。ユーザープロセスで64ビットマスクを使用する必要があります。アプローチ1:->u64bits変数を使用します。アプローチ->232ビット変数の配列を使用します。
1 に答える
0
まず、カーネルはこの質問への回答とは関係ありません。
次に、これはあなたが話しているx86だと思います。可能な場合、コンパイラは2つの32ビットレジスタに64ビット値を配置します。たとえばuint64_t
、関数からaを返す場合、下位32ビットはeax
レジスタに格納され、上位ビットはに格納されedx
ます。
コンパイラーは通常、パフォーマンスと正確さのために正しいことを行います。配列を使用すると、配列が混乱し、結果が悪化する可能性があります。
ちなみに、x86-64 CPUは通常、単一の64ビット読み取りと同じ速度で2つの隣接する32ビットワードの読み取りを実行します。64ビットモードの利点は、64ビット値で直接演算を実行できること(164x64乗算命令と3-432x32命令)、レジスタで使用できるスペースがはるかに多いことです(8ではなく16レジスタ、レジスタは2倍です)。幅が広い)、そしてもちろん、可能な限り大きな仮想アドレス空間。
于 2012-08-11T20:09:21.890 に答える