内存分配是系统调用吗?例如,malloc
和 new
。是由不同进程共享并由操作系统管理的堆。私有(private)堆呢?如果堆中的内存分配由操作系统管理,这有多贵?
我还希望有一些链接可以指向可以阅读有关此主题的更多信息的地方。
最佳答案
通常,malloc
和 new
不会在每次调用时执行系统调用。但是,它们使用较低级别的机制来分配大内存页。在 Windows 上,较低的机制是 VirtualAlloc()
.我相信在 POSIX 系统上,这有点相当于 mmap()
.这两者都执行系统调用以在操作系统级别为进程分配内存。后续分配将使用这些大页面的较小部分,而不会引发系统调用。
堆通常是内部进程并且不在进程之间共享。如果您需要,大多数操作系统都有一个用于分配 shared memory 的 API。 . Boost.Interprocess 中提供了这些 API 的可移植包装器。图书馆。
如果你想了解更多关于内存分配和与操作系统的关系,你应该看看一本关于操作系统的好书。我总是建议Modern Operating Systems作者 Andrew S. Tanenbaum,因为它很容易阅读。
关于c++ - 内存分配是系统调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6530355/