如何知道在C中为单个程序分配的内存的完整大小?

时间:2018-01-10 08:41:01

标签: c malloc free dynamic-memory-allocation

检查在程序结束时分配的程序总内存,因为我使用 free()函数来解除分配数组。

1 个答案:

答案 0 :(得分:2)

没有标准的方法可以知道这一点,并且“内存的完整大小”的概念没有很好地定义(它的“分配”可以在malloc外部独立发生,例如在Linux上通过直接调用到mmap(2)等......)

在实践中(假设您的代码在process上在桌面或笔记本电脑上的某些常见operating system上运行),请改为virtual address space

阅读Operating Systems: Three Easy Pieces(可免费下载)。

在Linux上(但这是特定于Linux的),您可以使用/proc/(有关详细信息,请参阅proc(5))来查询内核有关虚拟地址空间和某些进程的状态。有关pid 1234的流程,请参阅/proc/1234/maps/proc/1234/status

您可以(也可能应该)使用valgrind来搜寻memory leaks

使用GNU glibc,您还有mallinfo(3)& malloc_stats(3)(但他们是非标准的)等......

请注意mallocfree使用较低级别的系统调用,例如mmap(2)& munmap(或较旧的sbrk(2)等)来更改虚拟地址空间,但free通常不会使用munmap向内核释放内存但是我希望保留并标记释放的内存区域以供将来malloc使用。

如果您真的想要(甚至提供自己的),可以使用其他implementations of malloc。但你通常不应该这样做。