内存分配是系统调用吗?例如, malloc
和 new
。是由不同进程共享并由操作系统管理的堆。私有堆呢?如果堆中的内存分配由操作系统管理,这有多贵?
我还想有一些链接到我可以阅读更多关于这个主题的地方。
原文由 Jim 发布,翻译遵循 CC BY-SA 4.0 许可协议
内存分配是系统调用吗?例如, malloc
和 new
。是由不同进程共享并由操作系统管理的堆。私有堆呢?如果堆中的内存分配由操作系统管理,这有多贵?
我还想有一些链接到我可以阅读更多关于这个主题的地方。
原文由 Jim 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
一般来说,
malloc
和new
不会在每次调用时执行系统调用。但是,它们使用较低级别的机制来分配大内存页。在 Windows 上,较低的机制是VirtualAlloc()
。我相信在 POSIX 系统上,这在某种程度上相当于mmap()
。这两者都执行系统调用以在操作系统级别为进程分配内存。随后的分配将使用这些大页面的较小部分,而不会引发系统调用。堆通常是内部进程,并且不在进程之间共享。如果您需要,大多数操作系统都有一个用于分配 共享内存 的 API。 Boost.Interprocess 库中提供了这些 API 的可移植包装器。
如果你想了解更多关于内存分配和与操作系统的关系,你应该看看一本关于操作系统的好书。我总是推荐 Andrew S. Tanenbaum 的 Modern Operating Systems ,因为它很容易阅读。