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

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

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

最佳答案

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

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

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

https://stackoverflow.com/questions/6530355/

相关文章:

c++ - 每个类都应该有一个虚拟析构函数吗?

c++ - C中有const吗?

c++ - C++ 中的 vector ::size_type

>' should be ` > >' within ">c++ - 模板内的模板 : why "` >>' should be ` > >' within

c++ - 是否有可以解析 C++ 的优秀 Python 库?

c++ - C 样式字符串作为模板参数?

c++ - 如何在 GCC 搜索路径中包含头文件?

c++ - 如何遍历打包的可变参数模板参数列表?

c++ - 使用 Qt 进行序列化

c++ - 什么时候需要 "typename"关键字?