C++ new运算符是否保证返回的指针不会改变其值?

Ale*_*son 4 c++ standards operating-system memory-management

在C++中:

const size_t N = 1000;
int* p = new int[N];// time=t0
Run Code Online (Sandbox Code Playgroud)

我的程序只有一个线程,在分配内存后p,我的程序只会读取指向的内存p.

标准对价值的评价是p什么?

p保持,直到它得到在时间价值= T0 deletep

或者,操作系统可以自行决定重新分配指向的内存p吗?

它取决于价值N吗?

Yef*_*efu 5

p的值在创建后无法移动.该标准使得这样做毫无用处:

3.7.4.1分配功能

...如果请求成功,则返回的值应为非空指针值(4.10)p0,与先前返回的值p1不同,除非该值p1随后传递给运算符delete.

(引用标准的结尾)


因此,如果在运行时,由于合并某些内存片段等原因,某些事情决定将p移动到另一个地址,则该标准使得原始p指向的空间不可能被另一个内存分配使用.这个空间将被浪费掉.