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++ 编译器)会根据内存分配的方式给出一些其他值。
运行这段代码时
#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++ 编译器)会根据内存分配的方式给出一些其他值。