【发布时间】:2019-10-15 18:18:39
【问题描述】:
我正在使用代码示例来检查两个整数之间的距离,例如 the answer of this question。
int i = 0, j = 0;
std::cout << &i - &j;
根据我对内存表示的理解,这两个变量的这些内存地址应该是相邻的,并且差应该正好是1。
令我惊讶的是,在 VS2017 中使用 MS 编译器运行此代码会打印出 3,而使用 GCC 运行相同的代码会打印出 1。
为什么会出现这种情况,VS有什么问题吗?
【问题讨论】:
-
您所做的是未定义的行为。除非它们在同一个数组中,否则不能减去指针。
-
内存布局完全由编译器决定局部变量。只有类或结构成员才能获得标准的任何保证。
-
"根据我对内存表示的理解,这两个变量的这些内存地址应该是相邻的,并且差值应该正好是1。" 你从哪里得到的这样的理解,从何而来?
-
@AlgirdasPreidžius 我对这个假设有点偏离,认为变量将一个接一个地放置在内存中,但你是对的,它们可以在任何地方。不过,我倾向于相信,在大多数情况下,它们会彼此靠近。
-
@meJustAndrew 这仍然没有回答我提出的问题:你从哪里得到这样的理解? “不过,我倾向于相信在大多数情况下,在这些情况下,它们会彼此接近。” 这些信念基于什么?你刚刚得到了一个结果,这与那些信念相矛盾..
标签: c++ visual-studio gcc memory