我在处理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兆字节。一台笔记本电脑能有这么多内存吗?如果这是不可能的,怎么解释呢?
发布于 2017-06-26 19:22:20
64位操作系统可以产生大量的地址空间.什么会限制它?
只有在需要时才会对地址空间进行物理内存(RAM)的备份。
malloc调用所要做的就是返回一个地址。在尝试读取或写入该地址之前,该地址不需要引用物理内存。
这种行为的缺点是,失败的malloc调用通常是实现的唯一机会,可以很好地告诉您,您无法拥有所要求的内存。在此之后,当系统试图使用比系统能够返回的内存更多的内存时,系统所能做的就是终止进程。
几乎可以肯定的是,您的实现为您提供了某种方法来控制这种行为,无论是在系统级别,对于每个进程,还是两者都是如此。
https://stackoverflow.com/questions/44767168
复制相似问题