当前位置: 首页 > 面试题库 >

malloc是否在Linux(和其他平台)上懒惰地为分配创建后备页面?

呼延俊风
2023-03-14
问题内容

在Linux上,如果我愿意malloc(1024 * 1024 * 1024),malloc实际上是做什么的?

我确定它会为分配分配一个虚拟地址(通过遍历空闲列表并在必要时创建新的映射),但是它实际上是否创建了1
GiB的交换页?还是mprotect当您实际触摸它们时就创建地址范围并创建页面mmap

(我之所以指定Linux,是因为该标准在这些细节上没有任何说明,但是我很想知道其他平台也可以这样做。)


问题答案:

Linux确实也推迟了页面分配。“乐观的内存分配”。从malloc取回的内存没有任何内容,当您触摸它时,您实际上可能会遇到OOM条件(如果您请求的页面没有交换空间),在这种情况下,进程会异常终止。

参见例如http://www.linuxdevcenter.com/pub/a/linux/2006/11/30/linux-out-of-
memory.html



 类似资料:
  • 我想创建可以从文件系统中为资源服务的参与者。理想情况下,[1]我希望每个目录和每个文件都有一个参与者。但是我不想创建整个actor树层次结构,因为我希望尽可能节省内存和资源。 据我所知,只有当它的父级存在时,才能创建一个演员。懒洋洋地创建这些层次结构的最佳方法是什么。是否有一个钩子可以用来捕捉失败并在飞行中创建参与者层次结构,并有效地这样做? 这样,我就可以向参与者发送、、、...消息,从而使ak

  • 问题内容: 例如,如果我有以下语句: 如果foo1为true,python将检查foo2的条件吗? 问题答案: 是的,Python懒惰地评估布尔条件。 该文件说, 表达式x和y首先计算x;如果x为假,则返回其值;否则,将评估y并返回结果值。 表达式x或y首先计算x; 如果x为true,则返回其值;否则,将评估y并返回结果值。

  • 问题内容: 我在Linux上编写了一个C程序,该程序可以分配内存,并在一个循环中运行它,而TOP没有显示任何内存消耗。 然后我对该内存做了一些操作,而TOP确实显示了内存消耗。 当我分配内存时,我真的是“获取内存”,还是有一个“惰性”内存管理,仅当使用时才给我内存? (还有一个选项,当我使用它时,TOP只知道内存消耗,因此我不确定。) 谢谢 问题答案: 在Linux上,malloc使用sbrk()

  • 问题内容: 我知道这可能是一个愚蠢的问题,但是我已经寻找了一段时间,找不到确切的答案。如果我使用或(在Linux机器上的C语言中),是否有人在RAM中分配空间?例如,如果我有2GB的RAM并想使用所有可用的RAM,我可以只使用组合键,还是还有我不知道的另一种选择? 我想编写一系列简单的程序,这些程序可以同时运行,并保留进程中使用的所有RAM来强制使用交换,并且频繁交换页面。我已经在下面的程序中尝试

  • 问题内容: 我的问题很简单,如何使这段代码变得懒惰: 上面的代码可以计算组合,但是可以在内存中创建整个数组数组。我需要让它返回类似的东西,除了Swift类型系统不允许我做一些通用的事情。 有什么想法如何实现这一目标并保持功能风格吗? 附注:我确实想过用生成器解决这个问题并跟踪索引的另一种方法,但是我不想跟踪任何状态,我想要一个纯函数式(如FP中)的解决方案。Haskell默认情况下会这样做,顺便说

  • SDK        LSV的SDK开发包对外开放,如果您和您的团队需要进行开发需使用LSV的SDK开发包,您可以进行申请,我们的工作人员会在两个工作日内与您联系以确定进一步事项。同时,我们也提供LSV安卓端的Java开发包,如有需要也可进行申请。 点击链接了解详情 移动端        LSV的移动端支持Android以及AndroidPad两个平台,用户可以同过不同的需求进行下载。LSV手机端