我想知道是否C或C++标准的保证,当realloc的是带一个小的(非零)大小的指针没有改变:如果新尺寸变小可以重新移动指针吗?
size_t n=1000;
T*ptr=(T*)malloc(n*sizeof(T));
//<--do something useful (that won't touch/reallocate ptr of course)
size_t n2=100;//or any value in [1,n-1]
T*ptr2=(T*)realloc(ptr,n2*sizeof(T));
//<-- are we guaranteed that ptr2==ptr ?
基本上,可以在OS决定自己,既然我们释放一个大内存块,他想利用所有的realloc来整理内存,并以某种方式移动ptr2?
早先在那个页面上,它说:“realloc()函数将ptr指向的内存对象的大小更改为由size指定的大小。对象的内容将保持不变,直到new和如果内存对象的新大小需要移动对象,则先前实例化对象的空间将被释放。它并不排除议案,但相对不太可能。 – 2009-11-15 05:30:04
是的,你仍然保证,以前的任何内存仍然会在那里,谢谢指出 – 2009-11-15 15:19:13