检查在程序结束时分配的程序总内存,因为我使用 free()函数来解除分配数组。
答案 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)(但他们是非标准的)等......
请注意malloc
和free
使用较低级别的系统调用,例如mmap(2)& munmap
(或较旧的sbrk(2)等)来更改虚拟地址空间,但free
通常不会使用munmap
向内核释放内存但是我希望保留并标记释放的内存区域以供将来malloc
使用。
如果您真的想要(甚至提供自己的),可以使用其他implementations of malloc
。但你通常不应该这样做。