日期:2014-05-16  浏览次数:20816 次

内存占用率达到 109% ,到底占用了多少内存?
我在linux系统下查看程序占用内存量,发现程序占用了125M,占用率达到了 109% ,而系统总内存才只使用了 33452K 。这是怎么回事啊?
我使用工具查看了动态分配的内存量,只有不到10M多,难道其它的都是静态分配的内存空间?


内存的详细信息请参看下面:

Mem: 33452K used, 84016K free, 0K shrd, 0K buff, 15720K cached
CPU: 0% usr 2% sys 0% nic 97% idle 0% io 0% irq 0% sirq
Load average: 0.47 0.43 0.49 1/71 1929
  PID PPID USER STAT VSZ %MEM %CPU COMMAND
 1690 1670 root S 125m 109% 2% ./i

------解决方案--------------------
这条记录的命令./i这个命令式什么意思,这个脚本里面有什么特别的东西吗?
------解决方案--------------------
貌似说明还占用了部分 swap 分区
------解决方案--------------------
LZ应该去查一下虚拟内存和物理内存的概念。
程序使用的内存是虚拟内存,它的大小由计算机的CPU的寻址能力决定,因此,对于32位计算机系统而言,程序最多可以使用4G的内存。对于linux/unix而言,系统使用1GB的地址空间,所以应用程序可以使用的空间是3GB;对windows而言,系统占用2GB空间,所以应用程序可以使用2GB空间。
换言之,你的程序,理论上,在linux/unix下,可以malloc(3GB)内存,在windows下,可以malloc(2GB)。而这和你的机器的物理内存是无关的。

在上述内存使用范围内的应用,LZ基本上不用担心程序不够内存分配。

33452K used, 84016K free, 15720K cached
内存占用量加cached的量远远不够 125M 啊。程序占用的其它内存在哪里?
---------------------------
至于这个问题,是OS操心的问题,LZ不用关心它的。从虚拟内存到物理内存的分段/分页映射、页进页出(交换)等等,都是OS已经替你处理好了的。