Visual c++ 当2 int';s存储在VisualStudio中,其位置之间的差异为12字节。这有什么原因吗?

Visual c++ 当2 int';s存储在VisualStudio中,其位置之间的差异为12字节。这有什么原因吗?,visual-c++,Visual C++,当我在VC++2008 Express中运行以下程序时,我得到两个连续存储的整数之间的位置差为“12”,而不是预期的“4”。在任何其他编译器上,答案都是“4”。“12”这个词有什么特别的原因吗 #include <iostream> using namespace std; int main() { int num1, num2; cin >> num1 >> num2; cout << &num1 <<

当我在VC++2008 Express中运行以下程序时,我得到两个连续存储的整数之间的位置差为“12”,而不是预期的“4”。在任何其他编译器上,答案都是“4”。“12”这个词有什么特别的原因吗

#include <iostream>
using namespace std;

int main()
{
    int num1, num2;
    cin >> num1 >> num2;
    cout << &num1 << endl << &num2 << endl;
    cout << int(&num1) - int(&num2)<<endl; //Here it shows difference as 12.
    cout << sizeof(num1);                  //Here it shows the size as 4.
    return 0;
}
#包括
使用名称空间std;
int main()
{
int num1,num2;
cin>>num1>>num2;

CUT< p>我将进行一个疯狂的猜测,并说你是在调试模式下构建的。尝试在发布模式下构建它,看看你得到了什么。我知道C++运行时会在调试模式下把内存保护放在分配的内存上,以捕捉缓冲区溢出。我不知道它是否与栈上的变量有类似的事情。

你可以开发。中国计算机的代码,或者可能是您使用的特定硬件存在一个小而罕见的缺陷。一个旧型号在设置高位时难以处理大量数字,如果变量位于连续的内存位置,则发现核心内存中电荷的积累可能会对相邻内存产生交叉影响nt内存位置和更改内容。其他可能是用于检测溢出和下溢的备用内存位置,可能是您正在运行32位软件,该软件映射到48位硬件架构上,该架构作为一个新模型提出,剩余的备用位和字节未使用。

您能显示所有输出吗?I'D有兴趣看到实际的指针值。只是想知道,堆栈是用Visual C++在内存中长大还是下降?我问原因是“int(& NUM1)-int(& NUM2)”还是“int(& NUM2)-int(& NUM1)”。这是否真的是一个问题——C++变量是否会与堆栈变量相邻,内存位置的差异是类型的大小?@提姆:C++规范对此没有任何说明。然而,这是实现局部变量的自然方式。这是关于编译器如何存储而不是任何形式的一致性的好奇。ce问题。这是请求的输出:0034F890 0034F884 12 4按任意键继续…是的。对我来说,调试给出12,发布给出-4。可能与VS2008的快速版本有所不同。我在调试模式下得到12,在发布模式下得到-4(VS2008专业版SP1)。很高兴知道为什么在调试模式中使用12字节的特定值。如果您提供了参考,这将是一个更有趣的答案;因为它现在看起来很牵强。