0

我有一个 64 位内核,我在用户区运行 32 位进程。在用户进程代码中,如果我声明一个 64 位变量,它将如何被引用。它会导致 2 次内存读取吗?基本上情况是:我需要在我的用户进程中使用 64 位掩码。方法 1:-> 使用 u64bits 变量。方法 -> 使用 2 个 32 位变量的数组。

4

1 回答 1

0

首先:内核与这个问题的答案无关。

其次,我假设这是您正在谈论的 x86。在可能的情况下,编译器会将 64 位值放置在 2 个 32 位寄存器中。例如,如果您uint64_t从函数返回 a,则低 32 位将存储在eax寄存器中,而高位将存储在edx.

编译器通常会为性能和正确性做正确的事情:使用数组可能只会混淆它并导致更糟糕的结果。

顺便说一句,x86-64 CPU 通常会以与单个 64 位读取相同的速度执行 2 个相邻 32 位字的读取。64 位模式的优点是可以直接对 64 位值进行算术运算(1 个 64x64 乘法指令 vs 3-4 个 32x32 指令),寄存器中有更多可用空间(16 个寄存器而不是 8 个,寄存器是两倍一样宽),当然还有更大的虚拟地址空间。

于 2012-08-11T20:09:21.890 回答