进程的内存地址空间

时间:2011-11-26 18:40:07

标签: c windows memory-management malloc

我知道Windows 32位允许任何进程大约2千兆字节的内存地址空间。 2千兆字节= 2147483648字节。我试图分配堆内存超过2147483648字节,我没有看到任何错误或异常,这个代码:

# include<iostream>

int main(){

    void *x=malloc(2147489999);
    free(x);
    system("pause");
    return 0;
}

是什么原因?

1 个答案:

答案 0 :(得分:5)

您没有检查返回值:)

#include <windows.h>
#include <malloc.h>
#include <stdio.h>
#include<iostream>

#define PAUSE getchar

int 
main(int argc, char *argv[])
{
    void *x=malloc(2147489999);
    if (x)
    {
      printf ("malloc succeeded: 0x%x...\n", x);
      free(x);
    }
    else
    {
      perror ("malloc failed");
    }
    PAUSE ();
    return 0;
}
  

C:\ temp&gt; \ bin \ vcvars32设置使用Microsoft Visual的环境   C ++工具。 C:\ temp&gt; notepad tmp.cpp

     

C:\ temp&gt; cl tmp.cpp Microsoft(R)32位C / C ++优化编译器   版本12.00.8168适用于80x86版权所有(C)Microsoft Corp 1984-1998。   保留所有权利。

     

tmp.cpp ... /out:tmp.exe tmp.obj

     

C:\ temp&gt; tmp malloc失败:没有错误