在Linux上,如果我达到malloc(1024 * 1024 * 1024),malloc实际上做什么?

我相信它会为分配分配一个虚拟地址(通过遍历空闲列表并在必要时创建一个新的映射),但它实际上会创建1Gib的交换页面吗?或者,当你真的像mmap一样touch 页面时,它会缩小地址范围并创建页面吗?

(我之所以 Select Linux,是因为the standard没有提到这些细节,但我想知道其他平台也有哪些功能.)

推荐答案

Linux执行延迟页面分配,又名"乐观内存分配".从malloc返回的内存没有任何支持,当你touch 它时,你可能会实际得到一个OOM条件(如果你请求的页面没有交换空间),在这种情况下为a process is unceremoniously terminated.

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

Linux相关问答推荐

空字符串和空文件的区别

无法在Raspberry PI 3 Model B上分配256TB的虚拟内存

Flutter 构建错误:';DART:JS_interop';在此平台上不可用

UTF-8输入和使用XGetICValues

2023 年如何在现代 Linux 上安装 Firebird SQL 版本 3 或 4?

如何在具有多种可能性的linux shell中获取最大值和最小值?

ln命令报错target not a directory

更改 awk 中的上一个重复行

Rust unix 进程

sed 命令在 gitlab runner 上无法正确执行

Azure Nvidia 中的 apt-update 给出公钥错误

在 Linux 中 Select 多个同名的可执行文件

为什么 XGrabKey 会生成额外的聚焦和聚焦事件?

如何在 UNIX 上的 $PATH 中转义冒号 (:)?

如何获取WiFi网络接口的MAC地址?

如何在不重新打印的情况下更新终端中的打印消息

zsh/bash 上不区分大小写的 Glob

C ++中套接字上的协议缓冲区

是否有一个 linux 命令来确定与给定进程 ID 关联的窗口 ID?

什么是适用于 Linux 的好的 Prolog IDE?