我正在调查我正在开发的C ++程序的RAM的使用。 启动时,它会消耗680MB的RES内存。
观察1: 我刚刚在main()函数的开头添加了一个sleep(1000)来查看初始消耗。 RES存储器非常小(一些KB),而VIRT存储器大约为630MB。
观察2: 通过在(1){}时只用无限循环编译一个非常简单的程序,我得到VIRT = 4KB且RES< 1KB。
我的理解1(经过一些研究): 文本/指令存储器段存储在虚拟存储器范围的开头。因此,Linux需要在启动进程后立即保留该空间。它不会在启动时加载物理内存中的所有二进制文件(因此观察1中的小RES),但仅在必要时加载。但是它需要保留指令/文本内存段的虚拟范围,因为堆段刚刚出现,并且这些段需要适合连续的内存范围。是吗?
理解2: 观察1中的高VIRT存储器被保留用于存储我的程序的指令段。在观察2中,二进制文件很小并且没有动态库。这就是它分配一个小虚拟内存的原因。是吗?
理解3: 指令/文本内存段将存储程序二进制文件中的代码和动态库中的代码。是吗?
理解4: Linux可以知道启动时指令/文本内存的最大总量。
问题:如何在内存方面了解二进制文件(可执行文件和动态库)的详细信息。根据我的理解4,Linux可以保留虚拟内存范围。我可以访问此微积分的详细信息吗?当然,我需要这些信息来确定哪个库很大,以及如何减少程序的内存使用量。
感谢您的帮助!!