gpt4 book ai didi

c++ - 为什么相继声明的两个变量在内存中并不相邻?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:29 25 4
gpt4 key购买 nike

我正在使用代码示例来检查两个整数之间的距离,例如 the answer of this question .

int i = 0, j = 0;
std::cout << &i - &j;

根据我对内存表示的理解,这两个变量的这些内存地址应该是挨着的,差应该正好是1。

令我惊讶的是,在 VS2017 中使用 MS 编译器运行这段代码会打印出 3,而使用 GCC 运行相同的代码会打印出 1

为什么会这样,是不是VS出问题了?

最佳答案

C++ 标准没有要求 C++ 编译器以任何特定方式分配具有自动存储持续时间的变量,包括使它们在内存中连续。事实上,编译器可能会选择不为变量分配任何内存,从而完全优化它。

这就是为什么减去指针只有当它们都指向同一个数组内的内存或数组末尾的一个元素时才有意义。在所有其他情况下,包括您的情况,您都会遇到未定义的行为。

关于c++ - 为什么相继声明的两个变量在内存中并不相邻?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58400528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com