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
查看