0

私は64ビットカーネルを持っていて、ユーザーランドで32ビットプロセスを実行しています。ユーザープロセスコードで、64ビット変数を宣言した場合、どのように参照されますか。2回のメモリ読み取りが発生しますか。基本的なシナリオは次のとおりです。ユーザープロセスで64ビットマスクを使用する必要があります。アプローチ1:->u64bits変数を使用します。アプローチ->232ビット変数の配列を使用します。

4

1 に答える 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 に答える