gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:51:34 25 4
gpt4 key购买 nike

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

最佳答案

没有标准的方法可以知道这一点,并且“内存的完整大小”的概念没有得到很好的定义(并且它的“分配”可能发生在malloc之外并且独立于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如果你真的想要(或者甚至提供你自己的)。但你通常不应该这样做。

关于c - 如何知道C中单个程序分配的内存的完整大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48183333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com