关于32位linux下物理内存与虚拟内存的计算

2013年5月31日 由 Creater 留言 »

今天在遇到一毕业设计同学问到如下这个问题:
cat /proc/pid/stat计算物理内存与虚拟内存时,为什么要如下计算?

tableProcess->setItem(0,3,new QTableWidgetItem(QString("%1M").arg((atof(vmsize)/(1024*1024)))));/*虚拟内存*/
tableProcess->setItem(0,4,new QTableWidgetItem(QString("%1M").arg((atof(rmsize)*4/1024))));/*物理内存*/

其实man以下应该就知道答案,以下是man的结果

vsize %lu
Virtual memory size in bytes.
rss %ld
Resident Set Size: number of pages the process has in real memory, minus 3 for administrative purposes. This is just the pages which count towards text, data, or stack space. This does not include pages which have not been demand-loaded in, or which are swapped out.

可以看出,虚拟内存的值是以字节表示的,而物理内存则时以页数来统计的。
所以对于虚拟内存直接除上1024*1024就可以的出以“M”位单位的答案。
对于物理内存,则需要一些操作系统知识,1个页大小位4K,所以计算方案转换位‘M’为单位时,需要*4/1024.
操作系统原理还是很重要的!!

广告位

发表评论

你必须 登陆 方可发表评论.