我想知道当使用较小(非零)大小调用realloc时,C或C++标准是否保证指针不会更改:
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 ?
Run Code Online (Sandbox Code Playgroud)
基本上,操作系统可以自行决定,因为我们释放了大量内存块,他想利用所有realloc来对内存进行碎片整理,并以某种方式移动ptr2?
Jef*_*rth 17
http://opengroup.org/onlinepubs/007908775/xsh/realloc.html
在成功完成且大小不等于0时,realloc()返回指向(可能已移动)已分配空间的指针.
不,不保证
realloc不需要将块保留在适当的位置,即使它适合,事实上,最简单的存根实现是一个可能不适合的示例:
malloc: 称呼sbrk。realloc: 打电话malloc和memcpy.free: 无操作。这听起来可能很荒谬,但有时对于嵌入式系统来说,像我刚刚描述的那样的实现实际上是最佳的实现。
| 归档时间: |
|
| 查看次数: |
4633 次 |
| 最近记录: |