gpt4 book ai didi

c - malloc - 系统调用 - 它是如何制作的?

转载 作者:太空宇宙 更新时间:2023-11-04 08:24:54 25 4
gpt4 key购买 nike

关于 malloc 和系统调用 - 我想知道进行系统调用时发生了什么。 Malloc 只是一个库函数,对吗?

所以 - 当调用 malloc 并且堆上还有未映射的内存时 - 我猜没有进行系统调用。但是,假设分配的堆已满 - 堆必须增长。在这里,不知陷阱是如何触发的?

进行系统调用需要陷阱,因此可以生成内核函数,例如 brk()mmap() - 但它是如何生成的?是通过某种内部异常吗?

我很想知道!!!

编辑:关于另一个问题 - 我已经看过它并且无法(暂时)了解任何关于系统调用函数,cpu 中的陷阱 - 而不是程序崩溃的原因

最佳答案

不需要特殊的陷阱或异常。 malloc 的伪代码是:

void *malloc(size_t size)
{
search for 'size' free space in available blocks;
if(no block found}
{
request additional memory from OS;
construct new block;
}
mark 'size' bytes used in block;
return pointer into block;
}

您想知道的步骤是从操作系统请求额外的内存;,正如您推测的那样,它通常是对 sbrk 的直接函数调用。

(是的,当你调用sbrk时,在它的实现中的某个地方会有一个特殊的机制,比如陷阱,来执行操作系统的上下文切换,这样它就可以它为您工作,但这与用于所有系统调用的机制相同。这不是您通常需要担心的事情:您只需像调用任何其他函数一样调用 sbrk()。 )

关于c - malloc - 系统调用 - 它是如何制作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31071204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com