请问malloc会分配物理内存吗
请问malloc返回后物理内存分配了吗,是否也是write的时候才分配物理内存? malloc调用完成虚拟内存的分配,这块内存现在还没有物理页与之对应,等到进程第一次读写这块内存的时候,发生缺页中断,这个时候,内核才分配这块内存对应的物理页。 回复 2# 收到说的不能再好了 回复 1# allkillers
LZ 也可以写一个测试程序,不停的 malloc,然后看看系统内存有么有减少。calloc 也可以试试。哦,你最后再测试一下加上 memset 的效果。
回复 4# Godbach
写了个测试程序发现,malloc之后就分配地址了,用top看空闲内存会减少,已用内存增加。 加入memset之后,和不用memset没区别,我的系统是centos。
主要要确定下,top命令是查看虚存分配使用情况,还是反映真实物理内存的。man top下看看。回复 5# zhonzn
javascript:void(0) 本帖最后由 zhonzn 于 2016-04-13 21:28 编辑
allkillers 发表于 2016-04-13 19:35 static/image/common/back.gif
主要要确定下,top命令是查看虚存分配使用情况,还是反映真实物理内存的。man top下看看。回复 5# zhonzn
...
你开帖讨论的就是物理内存,我这里回复的自然就是物理内存的,你有不明白的,动手写个10来行的小测试程序不就知道了? 你别告诉我不知道top能看物理内存的使用情况。
你还可以用free命令看看, 继续man free吧。 回复 5# zhonzn
实际上 malloc 之后,系统的内存不一定减少的。
而 memset 是肯定会导致减少的。你尝试分配一些大块内存试试吧,还有 calloc。
本帖最后由 zhonzn 于 2016-04-14 15:57 编辑
Godbach 发表于 2016-04-13 22:44 static/image/common/back.gif
回复 5# zhonzn
实际上 malloc 之后,系统的内存不一定减少的。
我定义一个2000个元素的指针数组,给它们都分配2048字节,先运行top,再运行程序后, 明显看到 free 数量减少,use 数量增加,程序退出后,内存就恢复,
在程序中加入menset之后 ,编译运行,内存减少的量跟没加入memset是一样的。
top和free看到的结果都一样。
可能是因为我申请的内存太小了,大的内研究过。。如果申请1G那就不知道了,没玩过,呵呵。
页:
[1]