【问题标题】:How will 64 bit variable be referenced in a 32 bit process?在 32 位进程中如何引用 64 位变量?
【发布时间】:2012-08-07 17:33:49
【问题描述】:

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

【问题讨论】:

    标签: memory kernel x86-64 32bit-64bit


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-01
      • 2022-11-13
      • 2012-06-05
      • 1970-01-01
      • 2012-07-11
      • 2020-05-29
      • 1970-01-01
      • 2015-07-16
      相关资源
      最近更新 更多