gpt4 book ai didi

c++ - 为什么数组的内存地址不总是增加?

转载 作者:行者123 更新时间:2023-11-30 00:46:02 25 4
gpt4 key购买 nike

在 32 位 ubuntu 虚拟机上尝试了以下代码:

static int a[0x1f0fff];
cout << &a[0x600000] << endl;
cout << &a[0x800000] << endl;
cout << &a[0x8fff00000] << endl;

0x984a140
0xa04a140
0x7c4a140

地址没有一直增加,真的很困惑。

位于堆中的数组,打印的是虚拟内存地址。是因为它超出了虚拟内存空间吗?

此外,根据another answer ,最后两行代码索引到未分配的内存部分。为什么没有报告段错误?

最佳答案

您的十六进制表示法虽然华而不实,但只不过是一种混淆(尽管十六进制文字的类型推断规则不同于十进制文字)。

您的代码的行为未定义,但可能不是出于您可能认为的原因。

请注意,&a[0x600000] 在获取之前实际上并没有尝试解引用 a 的不存在的第 (0x600000) 个元素它的地址。编译器需要将表达式计算为 a + 0x600000但是:

将指针设置为指向不是数组 a 中的元素的地址,或者指向该数组末尾的地址是未定义的行为。因此,允许编译器输出任何内容。

关于c++ - 为什么数组的内存地址不总是增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40107228/

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