在32位系统中,当尝试读取64位变量时,将首先读取哪些位?高或低?或者它可能会有所不同,我们不能依赖它? 例如:
uint64_t counter = 4;
uint64_t foo = counter;
因此,当foo的赋值发生时,计数器将被读入2个32位部分(低和高),哪个部分首先被读取?低或高还是变化?
答案 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名。由于工会力学,你可以在任何你想要的地方找到它