![](/img/trans.png)
[英]How memory management happens for process threads in one virtual address space?
[英]Memory address space of a process
我知道Windows 32位最多允许大约2 GB内存地址空间的任何进程。 2兆字节= 2147483648字节。 我尝试分配的堆内存远远超过2147483648字节,但没有看到错误或异常,此代码:
# include<iostream>
int main(){
void *x=malloc(2147489999);
free(x);
system("pause");
return 0;
}
是什么原因?
您没有检查返回值:)
#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> \\ bin \\ vcvars32设置使用Microsoft Visual C ++工具的环境。 C:\\ temp>记事本tmp.cpp
C:\\ temp> cl tmp.cpp用于80x86的Microsoft(R)32位C / C ++优化编译器版本12.00.8168版权所有(C)Microsoft Corp 1984-1998。 版权所有。
tmp.cpp ... /out:tmp.exe tmp.obj
C:\\ temp> tmp malloc失败:无错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.