我正在与一位同事讨论malloc,并且想知道某些libc调用如malloc的情况是否是由操作系统实现的?
我一直认为malloc正在调用“sys”中暴露的一些符号来声明它将使用哪些内存地址。根据我的想法,操作系统将允许使用某些操作系统级api指定程序的分段...这可能类似于:
int assign_memory_segmention(size_t start, size_t end);
我知道我的stdlib.h头是GNU的一部分因为GPL头...而且GNU确保通知我......他们不是Unix。那么malloc只是某种类型的OS堆实现的函数指针吗?
答案 0 :(得分:3)
最好问另一个问题:什么是操作系统?或者如果您愿意:在哪里打印OS和标准库之间的界限?
从技术上讲,malloc
是标准C库的一部分。由于Linux主要是用C语言编写的,并且同一个库也包含许多系统调用,而不是C语言,因此认为该库是操作系统的一部分是合理的。
但是,另一方面,C库有几种实现方式,GNU C库也可用于其他操作系统,例如Windows。我确信还有其他语言使用标准C库调用操作系统而不使用。因此,从该POV来看,它不是操作系统的一部分。
但是,Linux是内核,操作系统应该命名为GNU / Linux(需要引用)。但同样,还有没有GNU的Linux系统,比如Android ......
结论是:术语"操作系统"不是技术问题。如果您想要精确,请使用内核或标准C库等。
答案 1 :(得分:1)
是的......没有。 C malloc()通常是OS调用提供的内存区域的子分配器。操作系统管理所有虚拟内存 - 这是其工作的一部分。