如题所示,
是否可以知道当前可用的虚拟内存 (可由 malloc/mmap 分配)在应用程序内部 以编程方式?
我要找的是某种函数
unsigned int free_mem();
这将返回可由 malloc 或 mmap 分配的内存大小。
最佳答案
由于您明确谈论可用的虚拟 内存,因此您需要找到当前未分配的虚拟地址空间部分。段信息在 proc/self/smaps
中可用。
但是,虚拟地址空间的大小取决于您的程序在其上执行的 cpu。这不是 64 位处理器上的 64 位,但可以通过 cat/proc/cpuinfo | 确定grep "address sizes"
产生
address sizes : 42 bits physical, 48 bits virtual
address sizes : 42 bits physical, 48 bits virtual
address sizes : 42 bits physical, 48 bits virtual
address sizes : 42 bits physical, 48 bits virtual
address sizes : 42 bits physical, 48 bits virtual
address sizes : 42 bits physical, 48 bits virtual
address sizes : 42 bits physical, 48 bits virtual
address sizes : 42 bits physical, 48 bits virtual
在我目前正在测试的虚拟机上。
请注意,可用虚拟地址空间的总量不同于一次可分配的最大量,因为您只能映射连续的内存量。
例如,考虑具有以下段的 32 位指针的简单情况:
00020000-000204ff /usr/bin/executable
00030000-0003ffff [heap]
7ff80000-7ff9ffff [stack]
在这种情况下,最大的连续段是 7ffA000-ffffffff
,但可用虚拟内存总量仅略小于 4 GB。
另请注意,malloc
可以通过重用已请求的页面来满足您的请求,而无需更多虚拟内存。这种方式可用的数量取决于很多因素(分配的大小或分配的大小,堆的状态)并且不能以任何可移植的方式查询。如果有人LD_PRELOAD
s another malloc
implementation,这会加倍.
关于c++ - 如何知道应用程序中可用的虚拟内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497840/