Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何知道在C语言中为单个程序分配的全部内存大小?_C_Malloc_Free_Dynamic Memory Allocation - Fatal编程技术网

如何知道在C语言中为单个程序分配的全部内存大小?

如何知道在C语言中为单个程序分配的全部内存大小?,c,malloc,free,dynamic-memory-allocation,C,Malloc,Free,Dynamic Memory Allocation,检查在程序结束时分配的程序总内存,因为我使用了free()函数来释放数组。没有标准的方法知道这一点,而且“完整内存大小”的概念没有很好的定义(及其“分配”)可能在malloc之外独立发生,例如在Linux上直接调用etc.) 在实践中(假设您的代码在台式机或笔记本电脑上的某个公用计算机上运行),请考虑以下方面 阅读(可免费下载) 在Linux上(但这是特定于Linux的),您可以使用/proc/(有关详细信息,请参阅)查询内核中的虚拟地址空间和某些进程的状态。有关pid 1234的过程,请参见/

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

没有标准的方法知道这一点,而且“完整内存大小”的概念没有很好的定义(及其“分配”)可能在
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