在C++中使用new时内存是顺序分配的吗?

问题描述 投票:0回答:1

假设我们使用以下方法为

int
类型的5个变量分配内存:
int* ptr = new int[5];
那么如果我是对的,分配内存的地址应该是随机的?例如: 如果
&ptr[0]
的地址比方说是 0x7fffa07f7560 那么
&ptr[1]
的地址应该是随机的而不是 0x7fffa07f7564.

只有当我们使用

int array[5];
在堆栈中分配内存时,我们才能获得相隔 4 个字节的连续地址。

c++ arrays memory memory-management dynamic-memory-allocation
1个回答
2
投票

不相关内存块的内存地址未指定,应视为实现细节。但是

int *ptr = new int[5]
分配了一个包含 5 个整数的数组的单个块。并且数组中的地址应该是连续的......(实际上是 C 标准 mandates 它们是。)

所以我们有以下等式:

  • &(ptr[1]) == &(ptr[0]) + 1
    每个指针算术
  • (void *) &(ptr[1]) == ((void *) &(ptr[0])) + sizeof(int)
    用于字节地址
© www.soinside.com 2019 - 2024. All rights reserved.