c++ - 内存分配是系统调用吗?

标签 c++ c operating-system heap-memory

内存分配是系统调用吗?例如,mallocnew。是由不同进程共享并由操作系统管理的堆。私有(private)堆呢?如果堆中的内存分配由操作系统管理,这有多贵?

我还希望有一些链接可以指向可以阅读有关此主题的更多信息的地方。

最佳答案

通常,mallocnew 不会在每次调用时执行系统调用。但是,它们使用较低级别的机制来分配大内存页。在 Windows 上,较低的机制是 VirtualAlloc() .我相信在 POSIX 系统上,这有点相当于 mmap() .这两者都执行系统调用以在操作系统级别为进程分配内存。后续分配将使用这些大页面的较小部分,而不会引发系统调用。

堆通常是内部进程并且不在进程之间共享。如果您需要,大多数操作系统都有一个用于分配 shared memory 的 API。 . Boost.Interprocess 中提供了这些 API 的可移植包装器。图书馆。

如果你想了解更多关于内存分配和与操作系统的关系,你应该看看一本关于操作系统的好书。我总是建议Modern Operating Systems作者 Andrew S. Tanenbaum,因为它很容易阅读。

关于c++ - 内存分配是系统调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530355/

相关文章:

c++ - 如何在另一个程序更新时流式显示文本文件?

连接 5 个或更多字节并转换为十进制,然后转换为 ASCII

python - 检查特定的 Python 脚本是否已在运行

c++ - 信号量的 Peek 操作

C++ 接受任何结构输入参数

c++ - 为什么要使用 MultiByteToWideCharArray 将 std::string 转换为 std::wstring?

c# - 泛型类型的术语

从 C 中的命令行捕获可变长度的字符串

将一个数组的某些内容复制到另一个数组,而不重复所包含的数据

windows - 在 Windows 中,为什么有些字符是非法的?