看这个简单的程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream> using namespace std; int main() { const int size = 2^30; char * p = new char[size]; for(int i = 0; i < size; ++i) { p[i] = 0; } sleep(121); return 0; } |
在后台运行该程序的多个实例,并查看内存占用:
1 2 3 4 5 6 7 8 9 | [04:07 PM] ivan@ivan-desktop ~/cpp> ./test& [1] 8345 [04:07 PM] ivan@ivan-desktop ~/cpp> ./test& [2] 8346 [04:07 PM] ivan@ivan-desktop ~/cpp> ./test& [3] 8347 [04:07 PM] ivan@ivan-desktop ~/cpp> ./test& [4] 8348 [04:07 PM] ivan@ivan-desktop ~/cpp> free |
total used free shared buffers cached
Mem: 1997172 1942672 54500 0 486080 1067476
只占了十分之一左右!这又是为什么呢?永远也学不完的虚拟内存啊!
呃……又SB了!const int size = 2^30;这哪里是1G啊!分明是28嘛!Orz…汇编码里面尽是28!这下好了,改成1<<30,运行了四个实例,机器就笨的像猪了:

System Monitor
等程序结束了,刚开始运行着到浏览器也慢了一会儿,估计是被换到交换文件里面去了。
你好!除了代码,此处没有多少原创之物,皆为本人搜集、整理、总结之记录与心得,欢迎转载分享!转载时请尽量注明出处,将不胜感激。祝你健康、快乐!
分配了,但是却没有使用,如果你多写一个循环去给每一个单元赋值,就会有效果了。
p.s. 为啥不用top/ps来看,用free?
再p.s. 用free的时候我会用free -m
我特意赋值了啊,难道赋成0还会有不同的效果?
嗯哪,top更合适一点。
可能被优化掉了。。看看汇编代码,用随机数填充试试。