我搞乱了malloc调用,我想知道我的操作系统能给你多少内存.我试过了:
int main() {
char *String = 0;
String = malloc (100000000000000); // This is 10^14
if (String)
printf ("Alloc success !\n");
else
printf ("Alloc failed !\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而且......它奏效了.10 ^ 14大约是18太字节.笔记本电脑是否有可能拥有如此多的内存?如果那不可能,怎么解释呢?
64位操作系统可以生成大量的地址空间.什么会限制它?
仅在需要时才使用物理内存(RAM)支持地址空间.
所有的malloc电话都要做的是返回一个地址.在尝试从中读取或写入之前,该地址无需参考物理内存.
这种行为的缺点是,malloc调用失败通常是实现的唯一机会,很好地告诉你,你不能拥有你要求的内存.在此之后,当系统尝试使用比系统可以返回的更多内存时,系统可以做的就是终止进程.
您的实现几乎肯定会为您提供一些方法来在系统级别,每个进程或两者中控制此行为.