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

关于内存使用情况的问题
我的系统是64M内存,在linux下不启动任何应用程序的情况下用free命令查得内存应用情况如下:
  total used free shared buffers
  Mem: 62420 9040 53380 0 2492
 Swap: 0 0 0
Total: 62420 9040 53380

我启动一个应用程序后,用free命令查得内存应用情况如下:
  total used free shared buffers
  Mem: 62420 10780 51640 0 2916
 Swap: 0 0 0
Total: 62420 10780 51640

修改该应用程序,在其中定义一个大小为5M的全局字符数组并进行引用后,用free命令查得内存应用情况如下:
  total used free shared buffers
  Mem: 62420 10792 51628 0 2924
 Swap: 0 0 0
Total: 62420 10792 51628

我不明白为什么我定义一个5M的全局数组并引用,内存used却和原来差不多大呢?高手过来解释一下,谢谢了!

------解决方案--------------------
linux的内存分配策略不是一次性完全分配,有些是用的时候再分配的
------解决方案--------------------
你定义一个空间,只是在你的进程的逻辑空间内分配了一段空间,程序在运行时,并不立即在内存内分配你定义的空间,只是在你要用到那里,系统才会把你的进程空间在系统内
进行映射,即分配空间.
如你的例子,你定义5M变量的,程序运行后,如果你这个变量一直没有用,那就不分配空间,至到你开始使用.比如你要使用你5M空间的前1M,那系统分配时,可能分配1M,也可能分配2M
也可能把这5M都分配给你,这也要看系统当前的运行状态而定
------解决方案--------------------
看看这个兄弟的帖子,可能会对你有帮助

mmap()在内存小时的性能 [已结贴]
http://topic.csdn.net/u/20070901/23/0a5ec793-eef5-4284-9a02-d2043fa41431.html