32位系统中的64位可变读取顺序(低和高)

时间:2018-05-18 18:48:58

标签: c 32bit-64bit 32-bit

在32位系统中,当尝试读取64位变量时,将首先读取哪些位?高或低?或者它可能会有所不同,我们不能依赖它? 例如:

uint64_t counter = 4; uint64_t foo = counter;

因此,当foo的赋值发生时,计数器将被读入2个32位部分(低和高),哪个部分首先被读取?低或高还是变化?

2 个答案:

答案 0 :(得分:1)

  

因此,当foo的赋值发生时,计数器将被读入2个32位部分(低和高),哪个部分首先被读取?低或高还是变化?

可能会有所不同。

C标准对内存访问的排序提供了很少的保证,特别是对于未声明为volatile的变量。有可能甚至不会进行两次内存访问,或者内存访问将被"拆分" (即,读一半,做别的,读另一半)。

答案 1 :(得分:0)

据我记得,完成者没有规则如何实施此类操作。硬件也没有这样的规则。

试试这个

   #include <iostream>

    using std::cout;

    union _64test {
        uint64_t _64;
        uint32_t _32[2];
    };

    int main() {

        _64test temp;
        temp._64 = 15;

        cout << temp._64 << "\n";
        cout << temp._32[0] <<" " << temp._32[1] << "\n";

        return 0;
    }

输出:

15,

15 0

在我的情况下,低分是第1名。由于工会力学,你可以在任何你想要的地方找到它