2012-08-10 69 views
0

我有一個64位的內核,我在userland中運行32位進程。在用戶進程代碼中,如果我聲明一個64位變量,它將如何被引用。它會產生2個內存讀取。 基本上情況是: 我需要在我的用戶進程中使用64位掩碼。方法一: - >使用u64bits變量。 方法 - >使用2個32位變量的數組。如何在32位進程中引用64位變量?

回答

0

首先:內核對這個問題的答案沒有影響。

其次,我認爲這是你正在談論的x86。在可能的情況下,編譯器將在2個32位寄存器中放置64位值。例如,如果從函數返回uint64_t,則低32位將存儲在eax寄存器中,高位將存儲在edx中。

編譯器通常會爲性能和正確性做正確的事情:使用數組可能會混淆並導致更糟糕的結果。

順便說一下,x86-64 CPU通常會以與單個64位讀取相同的速度讀取2個相鄰的32位字。 64位模式的優點是算術可以直接在64位值上完成(1 64x64乘法指令vs 3-4 32x32指令),寄存器中有更多可用空間(16個寄存器而不是8個寄存器是兩倍寬),當然還有更大的虛擬地址空間。

+0

我可能會談論x86。 – 2012-08-12 14:33:50