C - malloc - 系统调用 - 它是如何制造的?



关于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;
}

您想知道的步骤是request additional memory from OS;,正如您所推测的,它通常是对sbrk的直接函数调用。

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

为了了解malloc是如何制作的,您可以编写一个程序,在其中调用malloc,然后使用以下命令:strace yourprogram

使用此命令,您可以深入查看调用malloc时的跟踪系统调用和信号,并了解它是如何生成的。

相关内容

  • 没有找到相关文章

最新更新