如何知道在C语言中为单个程序分配的全部内存大小?
检查在程序结束时分配的程序总内存,因为我使用了free()函数来释放数组。没有标准的方法知道这一点,而且“完整内存大小”的概念没有很好的定义(及其“分配”)可能在如何知道在C语言中为单个程序分配的全部内存大小?,c,malloc,free,dynamic-memory-allocation,C,Malloc,Free,Dynamic Memory Allocation,检查在程序结束时分配的程序总内存,因为我使用了free()函数来释放数组。没有标准的方法知道这一点,而且“完整内存大小”的概念没有很好的定义(及其“分配”)可能在malloc之外独立发生,例如在Linux上直接调用etc.) 在实践中(假设您的代码在台式机或笔记本电脑上的某个公用计算机上运行),请考虑以下方面 阅读(可免费下载) 在Linux上(但这是特定于Linux的),您可以使用/proc/(有关详细信息,请参阅)查询内核中的虚拟地址空间和某些进程的状态。有关pid 1234的过程,请参见/
malloc
之外独立发生,例如在Linux上直接调用etc.)
在实践中(假设您的代码在台式机或笔记本电脑上的某个公用计算机上运行),请考虑以下方面
阅读(可免费下载)
在Linux上(但这是特定于Linux的),您可以使用/proc/
(有关详细信息,请参阅)查询内核中的虚拟地址空间和某些进程的状态。有关pid 1234的过程,请参见/proc/1234/maps
和/proc/1234/status
等
你可以(也可能应该)用它来打猎
有了GNU,您还拥有&(但它们是非标准的)等等
请注意,malloc
和free
使用较低级别的系统调用,如&munmap
(或较旧版本等)来更改虚拟地址空间,但是,free
通常不会使用munmap
将内存释放到内核,而是宁愿保留并标记释放的内存区域,以便malloc
将来使用
如果你真的想,你可以使用其他的(或者甚至提供你自己的)。但是您通常不应该这样做。没有标准的方法知道这一点,而且“内存的完整大小”的概念也没有很好的定义(它的“分配”可能发生在malloc之外,独立于malloc,例如在Linux上通过直接调用等…) 在实践中(假设您的代码在台式机或笔记本电脑上的某个公用计算机上运行),请考虑以下方面 阅读(可免费下载) 在Linux上(但这是特定于Linux的),您可以使用
/proc/
(有关详细信息,请参阅)查询内核中的虚拟地址空间和某些进程的状态。有关pid 1234的过程,请参见/proc/1234/maps
和/proc/1234/status
等
你可以(也可能应该)用它来打猎
有了GNU,您还拥有&(但它们是非标准的)等等
请注意,malloc
和free
使用较低级别的系统调用,如&munmap
(或较旧版本等)来更改虚拟地址空间,但是,free
通常不会使用munmap
将内存释放到内核,而是宁愿保留并标记释放的内存区域,以便malloc
将来使用
如果你真的想,你可以使用其他的(或者甚至提供你自己的)。但是您通常不应该这样做。标准库没有为此提供标准方法。你真正的问题是什么?根据系统的不同,有一些工具(如valgrind)来控制动态内存使用。您想知道堆栈大小还是堆大小?可以使用valgrind来更好地了解内存。标准库没有提供用于此的标准方法。你真正的问题是什么?根据系统的不同,有一些工具(如valgrind)来控制动态内存使用。您想知道堆栈大小或堆大小吗?您可以使用valgrind来更好地了解内存。我认为这里的OP关注的是程序的分配,而不是进程使用的实际空间。我想他想要一份马洛斯/自由的记录。这只是我的解释。因此我提到的
valgrind
&mallinfo
etcI think OP这里关注的是程序所做的分配,而不是流程所使用的实际空间。我想他想要一份马洛斯/自由的记录。只是我的解释。因此我提到了valgrind
&mallinfo
等