我有一个 C++ 应用程序,我试图消除内存泄漏,但我意识到我并不完全理解虚拟内存和物理内存之间的区别。
结果来自top
(所以 16.8g = 虚拟,111m = 物理):
4406 um 20 0 16.8g 111m 4928 S 64.7 22.8 36:53.65 client
我的进程拥有 500 个连接,每个用户一个,在这些数字上,这意味着每个用户大约有 30 MB 的虚拟开销。在不深入了解我的应用程序的细节的情况下,如果我不知道虚拟内存的实际含义,那么将所有向量、结构、线程、堆栈上的函数等加在一起听起来很现实的唯一方法是。顺便说一句,没有 -O 优化标志。
所以我的问题是:
- C ++中的哪些操作会使虚拟内存膨胀这么多?
- 如果我的任务正在使用虚拟内存,这会不会有问题?
- 堆栈和堆函数变量、向量等 - 这些是否必然会增加物理内存的使用?
- 消除内存泄漏(通过
delete
或free()
其他方式)是否必然会减少物理和虚拟内存的使用?