问题描述
自从我介绍了进程堆的概念以来,我一直假设OS在创建进程时对其进行分配。但是后来我做了一些研究,读了一条声明here。 它说:
当程序向malloc要求空间时,malloc要求sbrk增加堆大小并返回指向开始的指针 堆上的新区域。
如果我理解了所讲的内容,则OS会为进程的堆分配0个单元,并且只有通过调用malloc,进程才能获得一些堆单元。对我来说,这更适合“动态分配”的表达。这是正确的吗?
解决方法
在图中,您可以看到您的c / c ++程序具有可用的内存区域,在该区域中堆和堆栈可以增长,直到该区域满为止,因此,最初,堆为空,并且当进程调用malloc时, (但在现代实现中,malloc倾向于始终调用mmap()
),他调用sbrk()函数来增加堆的内存大小(实际上,他首先搜索自由链表,如果有的话)不是他称为sbrk()的链表中的任何条目,有关malloc()malloc implementation?的实现,请参见此内容。
因此,操作系统不会直接决定如何分配进程的堆,在c / c ++中,这种想法是这样工作的,但是我认为在其他语言中,这种想法可能会略有不同。 / p>