【问题标题】:How is it possible for a laptop to even have so much memory? [duplicate]笔记本电脑怎么可能有这么大的内存? [复制]
【发布时间】:2017-11-29 17:36:05
【问题描述】:

我正在处理 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 TB。笔记本电脑甚至有可能拥有如此多的内存吗? 如果这不可能,如何解释?

【问题讨论】:

  • 是虚拟内存,不是真实内存。
  • 只是为了实验,尝试编写它。
  • 谷歌“乐观内存分配”。
  • 这意味着当您尝试使用该空间时,您将面临崩溃。出于某种原因,Linux 认为让您分配比程序实际拥有的空间更多的空间很有趣。
  • 操作系统可能会通过虚拟内存来处理分配请求,但实际上并没有物理内存支持。意味着,您的 malloc() 可能会成功,但实际上 using 内存会失败。

标签: c memory malloc


【解决方案1】:

64 位操作系统可以生成大量地址空间。什么会限制它?

仅在需要时才使用物理内存 (RAM) 支持地址空间。

malloc 调用所要做的就是返回一个地址。在您尝试读取或写入该地址之前,该地址不需要引用物理内存。

这种行为的缺点是,调用 malloc 失败通常是实现的唯一机会,可以很好地告诉您您无法获得所需的内存。在此之后,系统所能做的就是在进程尝试使用的内存超过系统可以使用的内存时终止进程。

您的实现几乎可以肯定地为您提供了一些方法来控制这种行为,无论是在系统级别、每个进程还是两者兼而有之。

【讨论】:

  • 有时甚至没有支持...
  • 所以,如果我理解正确,通过 malloc 调用,我只能获得要写入的地址。但是,如果我要实际写入这些位置,我将无法写入所有这些位置,因为我不会留下实际内存,对吧?
  • @Jenkinx 对。系统已过度使用。此行为可在许多系统上进行配置。经过几十年的经验,我个人的偏好是分配足够的分页/交换空间并禁用过度使用。但这并不总是可能的。
  • 重要的是要了解@Jenkinx,您正在询问实施细节。 C 没有成功分配您实际上可能无法完全使用的内存块的概念。但是,是的,某些实现在某些情况下确实会表现出这种行为。
  • 这个答案将受益于简要提及虚拟地址空间和常驻内存。
猜你喜欢
  • 1970-01-01
  • 2016-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-09-09
  • 2019-11-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
相关资源
最近更新 更多