[英]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.