讓我們考慮這個很短的代碼片段:我可以假設調用更小尺寸的realloc會釋放餘數嗎?
#include <stdlib.h>
int main()
{
char* a = malloc(20000);
char* b = realloc(a, 5);
free(b);
return 0;
}
閱讀手冊頁的realloc後,我不能完全肯定的是,第二條線會導致被釋放了19995個額外的字節。引用手冊頁:The realloc() function changes the size of the memory block pointed to by ptr to size bytes.
,但從該定義中,我可以確定剩下的部分將被釋放嗎?
我的意思是,b
指出的塊肯定包含5個空閒字節,那麼對於懶惰的compitting分配器來說,只是不會爲realloc行做任何事情?
注:我使用的分配似乎釋放19個995額外的字節,作爲註釋掉free(b)
線時,所示的valgrind:
==4457== HEAP SUMMARY:
==4457== in use at exit: 5 bytes in 1 blocks
==4457== total heap usage: 2 allocs, 1 frees, 20,005 bytes allocated
標準未定義標頭'':寧願使用''。同樣,從'malloc'(或'realloc')投射返回值沒有任何用處,並且可能會隱藏一個錯誤(*表示void *和int是不同的*),否則編譯器會捕獲它。 –
pmg
2012-03-05 22:42:31
[「由ptr參數指向的內存塊的大小更改爲字節大小,擴展或減少塊中可用的內存量。」](http://www.cplusplus.com/reference/clibrary/cstdlib/realloc /) – 2012-03-05 22:44:35
@pmg ok我不知道。我將在我的代碼片段中更改 – qdii 2012-03-05 22:45:11