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

How to know the full size of memory allocated for a single program in C?

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

没有标准的方法知道这一点,"full size of memory" 的概念没有明确定义(它的 "allocation" 可能发生在 malloc 之外并独立于 malloc,例如 Linux 通过直接调用 mmap(2) 等...)

在实践中(假设您的代码是 运行 在 process on some common operating system on a desktop or laptop), think instead in terms of virtual address space.

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

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

您可以(并且可能应该)使用 valgrind to hunt memory leaks

使用 GNU glibc, you also have mallinfo(3) & malloc_stats(3)(但它们是非标准的)等...

请注意 mallocfree 使用较低级别的系统调用,例如 mmap(2) & munmap(或较旧的 sbrk(2 ), 等等...) 来更改虚拟地址 space,但是 free 通常不会使用 munmap 向内核释放内存,而是更喜欢保留和通过 malloc.

标记释放的内存区域以备将来使用

如果您确实愿意,可以使用其他 implementations of malloc(甚至提供您自己的)。但你通常不应该。