linux - 分析文本/指令段大小
问题描述
我正在调查我正在开发的 C++ 程序的 RAM 的使用。启动时,它消耗 680MB 的 RES 内存。
观察 1:我只是在 main() 函数的开头添加了一个 sleep(1000) 来查看初始消耗。RES 内存非常小(一些 KB),而 VIRT 内存约为 630MB。
观察 2:通过编译一个只有无限循环 while(1) {} 的非常简单的程序,我得到了 VIRT = 4KB 和 RES < 1KB。
我的理解1(经过一番研究):文本/指令内存段存储在虚拟内存范围的开头。因此,Linux 需要在启动进程后立即保留该空间。它不会在启动时将所有二进制文件加载到物理内存中(因此观察 1 中的 RES 很小),但仅在必要时加载。但是它需要为指令/文本内存段保留虚拟范围,因为堆段紧随其后,并且这些段需要适合连续的内存范围。真的 ?
理解2:观察1中的高VIRT内存是为存储我的程序的指令段而保留的。在观察 2 中,二进制文件很小,没有动态库。这就是为什么它分配一个小的虚拟内存。真的 ?
理解 3:指令/文本内存段将存储我的程序二进制文件中的代码和我的动态库中的代码。真的 ?
理解 4:Linux 可以知道启动时指令/文本内存的最大总量。
问题:我如何知道二进制文件(可执行文件和动态库)在内存方面的详细要求。按照我的理解4,Linux可以做到保留虚拟内存范围。我可以访问此微积分的详细信息吗?当然,我需要这些信息来确定哪个库那么大,以及如何减少程序的内存使用量。
谢谢您的帮助 !!
解决方案
推荐阅读
- selenium - Selenium:ChromeDriver 和 Chromium-Browser 和 Raspberry Pi 之间的不同版本
- java - Java 访问对象中的数组
- python - Python中的惰性排序
- javascript - 如何根据按钮单击验证表单字段?
- javascript - 我需要在我的反应组件中为 text2 创建一个延迟
- c - 无法在共享对象文件中通过 system() 命令运行 python 文件
- android - 如何增强和提高 recyclerView 适配器的性能
- spring - Spring Security WebTestClient 在模拟 JWT 时不调用 OncePerRequestFilter
- ab-testing - 如果我将更改推送到着陆页,Google 优化工具会继续测试我的页面变体吗?
- java - 通用消息如何
作品?