我在搞乱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;
}
而且......它奏效了。 10 ^ 14大约是18太字节。笔记本电脑是否有可能拥有如此多的内存? 如果不可能,怎么解释呢?
答案 0 :(得分:7)
64位操作系统可以生成大量的地址空间。什么会限制它?
仅在需要时才使用物理内存(RAM)备份地址空间。
所有LiveData
调用必须返回一个地址。该地址在您尝试从中读取或写入之前无需参考物理内存。
这种行为的缺点是malloc
通话失败通常是实施的唯一机会,很好地告诉你,你不能拥有你要求的记忆。在此之后,当系统尝试使用的内存超过系统可以返回的内存时,系统可以做的就是终止进程。
您的实现几乎肯定会为您提供一些方法来在系统级别,每个进程或两者中控制此行为。