main.cpp
#include <cstdlib>
#include <iostream>
int64_t total = int64_t(128) * 1024 * 1024 * 1024;
char * p;
int main() {
while (total) {
// 一次申请500M
size_t batch = 1024 * 1024 * 500;
batch = batch > total ? total : batch;
if ((p = new char[batch]) == nullptr) {
std::cout << "申请失败,还剩 " << total << std::endl;
exit(1);
}
for (int i = 0; i < batch; i++) {
*p = '0';
p++;
}
total -= batch;
}
std::cout << "申请结束" << std::endl;
while (1);
return 0;
}
这里需要注意:
堆、栈分配的内存,如果没有使用是不会占用实存的,只会记录到虚存。
如果程序占用实存比较多,说明程序申请内存多,实际使用的空间也多。
如果程序占用虚存比较多,说明程序申请来很多空间,但是没有使用。
所以只用malloc申请内存是不行的,只会增加虚存
编译
g++ -std=c++11 main.cpp -o control_mem
运行
./control_mem
查看

该博客探讨了C++程序中内存管理的问题,通过示例展示了如何动态分配大块内存并逐一填充。程序首先申请500MB内存,然后依次填充,直至所有内存分配完毕。文章强调了堆和栈分配内存的特性,指出未使用的内存不会占用实际内存,而只会在虚拟内存中记录。同时,大量申请但未使用的内存会导致虚拟内存增加。最后,博客建议仅申请内存是不够的,必须确保实际使用以避免浪费。
1万+

被折叠的 条评论
为什么被折叠?



