C, Xcode and memory



为什么在执行下一个c代码后Xcode显示比原来多20KB ?

void *p = malloc(sizeof(int)*1000);
free(p);

我必须以另一种方式释放内存吗?或者这只是一个Xcode错误?

当你说"Xcode显示比原来多20KB"时,我想你的意思是小条形图增加了20KB。

当您malloc一个对象时,C库首先检查进程的地址空间,看看是否有足够的空闲空间来满足请求。如果没有足够的内存,它会向操作系统请求为进程分配更多的虚拟内存。Xcode中的图形测量进程拥有的虚拟内存量。

当您释放一个对象时,内存永远不会返回给操作系统,相反,它"只是"被放在空闲块列表中供malloc重用。我把"只是"这个词放在引号里,因为实际的算法可能非常复杂,为了尽量减少堆碎片和malloc和释放块所花费的时间。内存永远不会返回给操作系统的原因是,对操作系统进行系统调用以获取和释放内存是非常昂贵的。

因此,您永远不会看到进程的内存使用量下降。如果您malloc一个gb的内存,然后释放它,该进程仍然会显示使用一个gb的虚拟内存。

如果您想看看您的程序是否真的泄漏,您需要使用泄漏配置文件工具。这会拦截malloc和free调用,因此它知道哪些块名义上仍在使用,哪些块已被释放。

最新更新