我想知道是否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