内存泄漏使用malloc失败

Poo*_*rna 3 c linux memory

我正在编写一个泄漏内存(主内存)的程序来测试系统在低系统内存和交换内存时的行为方式.我们使用以下循环定期运行并泄漏内存

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"时,我可以看到运行该程序对主内存或交换没有影响.

难道我做错了什么 ?

caf*_*caf 8

在您实际写入之前,物理内存不会提交给您的分配.

如果您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)

如果您有较旧的内核,则必须触摸分配中的每个页面.