c++ - 为什么一个接一个声明的两个变量在内存中不相邻?
问题描述
我正在使用代码示例来检查两个整数之间的距离,就像在这个问题的答案中一样。
int i = 0, j = 0;
std::cout << &i - &j;
根据我对内存表示的理解,这两个变量的这些内存地址应该是相邻的,并且差值应该正好是 1。
令我惊讶的是,在 VS2017 中使用 MS 编译器运行此代码会打印3并使用 GCC 运行相同的代码会打印1。
为什么会发生这种情况,VS有问题吗?
解决方案
C++ 标准没有要求 C++ 编译器以任何特定方式分配具有自动存储持续时间的变量,包括使它们在内存中连续。事实上,编译器可能会选择不为变量分配任何内存,从而完全优化它。
这就是为什么只有当指针都指向同一个数组内的内存,或者指向数组末尾的一个元素时,减去指针才有意义。在所有其他情况下,包括您的情况,您都会得到未定义的行为。
推荐阅读
- reactjs - 如何使用 Google maps api 和 google-maps-react V2.0.2 在 React 中访问 InfoWindow 内容中的表单
- c++ - MacOS High Sierra 上的 Cassandra C++ 驱动程序:make: no rule to make target
- python - 将数组转换为 CSV,包括多行图像
- javascript - Angular 材料步进器下一步显示创建而不是 1
- javascript - 为所有请求动态设置标头(反应,超级代理)
- excel - 切片器的枢轴过滤器问题
- async-await - Flow 确实在 async/await 之后将变量解释为 Promises
- sql - SQL 'Sum' 文本字段,用逗号分隔
- powerbi - 视觉已超出可用资源。关于如何简化/更好地理解限制的提示?
- ios - 如何以交互模式运行expo?