如何在32位进程中引用64位变量?

时间:2012-08-10 12:02:10

标签: memory kernel 32bit-64bit

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

1 个答案:

答案 0 :(得分:0)

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

其次,我认为这是你正在讨论的x86。在可能的情况下,编译器将在2个32位寄存器中放置64位值。例如,如果从函数返回uint64_t,则低32位将存储在eax寄存器中,高位将存储在edx中。

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

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