【发布时间】:2019-12-26 05:57:04
【问题描述】:
有没有什么方法可以让用户进程在不使用系统调用的情况下进行动态内存分配?我知道 malloc 使用 brk() 或 mmap() 系统调用来分配内存。
【问题讨论】:
标签: operating-system malloc system-calls dynamic-memory-allocation
有没有什么方法可以让用户进程在不使用系统调用的情况下进行动态内存分配?我知道 malloc 使用 brk() 或 mmap() 系统调用来分配内存。
【问题讨论】:
标签: operating-system malloc system-calls dynamic-memory-allocation
我们可以在没有系统调用的情况下进行动态内存分配吗?
实际上,对于大多数(但不是全部)操作系统来说,是的。
具体来说,如果您在“.bss”部分保留一个巨大的区域,那么大多数操作系统在写入该区域之前不会为该区域分配物理 RAM,您可以实现某种堆(“malloc() ") 使用保留的巨大区域。
注意:虽然这可以避免在内核之间切换系统调用,但不能避免在内核之间切换页面错误。
我知道 malloc 使用 brk() 或 mmap() 系统调用来分配内存。
这是“特定于语言运行时”的事情。没有理由(对于像 C 这样的语言)标准库不能做同样的“巨大的保留部分”技巧;并且没有理由你不能编写一个根本不使用“malloc()”的程序(我目前用 C 编写的程序这样做是因为“malloc()”是一个令人讨厌的破坏),并且没有一种不同的语言(例如,可能是基于堆栈的语言,如 LISP?)的原因,会出现可怕的 POSIX/C 混乱。
【讨论】: