[英]Also check realloc() if shrinking allocated size of memory?
當調用realloc()
,應在將返回的指針分配給作為參數傳遞給函數的指針之前檢查函數是否失敗...
我一直遵循這個規則。
現在,當您確定內存將被截斷且不會增加時,是否有必要遵循此規則?
我從未見過失敗。 只是想知道我是否可以保存一些說明。
即使您將realloc
(請仔細閱讀realloc(3)和有關Posix realloc的內容 )的大小減小,其基礎實現也等效於malloc
(具有較小的新大小),然后執行memcpy
(從舊區域到新區域) ,然后從舊區域中free
。 否則它可能什么也不做...(例如,因為某些粗略的malloc
實現保留有限的一組大小-例如2或3的2倍冪,並且新舊大小要求都適合相同的大小...。 )
該malloc
可能失敗。 因此,重新realloc
仍然可能失敗。
實際上,出於這種原因,我通常不建議使用realloc
:只需執行malloc
, memcpy
, free
自己即可。
實際上,像malloc
這樣的動態堆內存功能很少會失敗。 但是,當他們這樣做時,如果不處理,可能會發生混亂。 在Linux和其他一些POSIX系統,你可以了setrlimit(2)與RLIMIT_AS
-例如,使用bash ulimit
builtin-降低用於測試目的的限制。
您可能需要研究C內存管理的源代碼實現。 例如, MUSL libc (對於Linux)是非常易讀的代碼。 在Linux上, malloc
通常建立在mmap(2)之上( C庫可以使用mmap
分配很大的內存,然后管理其中較小的已使用和已釋放的內存區域)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.