我正在编写一个泄漏内存(主内存)的程序来测试系统在低系统内存和交换内存时的行为方式.我们使用以下循环定期运行并泄漏内存
main(int argc, char* argv[] )
{
int arg_mem = argv[1];
while(1)
{
u_int_ptr =(unsigned int*) malloc(arg_mem * 1024 * 1024);
if( u_int_ptr == NULL )
printf("\n leakyapp Daemon FAILED due to insufficient available memory....");
sleep( arg_time );
}
}
Run Code Online (Sandbox Code Playgroud)
上面的循环运行一段时间并打印消息"leakyapp Daemon FAILED由于可用内存不足......".但是当我运行命令"free"时,我可以看到运行该程序对主内存或交换没有影响.
难道我做错了什么 ?
在您实际写入之前,物理内存不会提交给您的分配.
如果您2.6.23之后有一个内核版本,采用mmap()
与MAP_POPULATE
标志,而不是malloc()
:
u_int_ptr = mmap(NULL, arg_mem * 1024 * 1024, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_POPULATE, -1, 0);
if (u_int_ptr == MAP_FAILED)
/* ... */
Run Code Online (Sandbox Code Playgroud)
如果您有较旧的内核,则必须触摸分配中的每个页面.