g++ -std=c++11 和 visual studio 2013 之间的不同变量地址

Different variable address between g++ -std=c++11 and visual studio 2013

运行这段代码时

#include <cstdlib>
#include <cstdio>

int main() {
    char b;
    char c;
    printf("%d\n", &b - &c);
    return 0;
}

我使用 Microsoft visual studio 2013 获得了 12,使用 Ubuntu 14.04 下的 g++ -std=c++11 -1。造成这种差异的原因是什么?

还是我在测试变量的内存地址时出错了?

它实际上是特定于实现的。对于给定的代码:

#include <cstdlib>
#include <cstdio>

int main() {
    char b;
    char c;
    printf("%p %p %u\n", &b, &c, &b - &c);
    return 0;
}

GCC 和 MinGW 为我提供了 1 的输出。从 &b 和 &c 的值来看,我们可以说内存是连续分配给两个字符 b 和 c 的。但是,其他编译器(如 VS-2013 和 Intel C++ 编译器)会根据内存分配的方式给出一些其他值。