栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在malloc期间内核中会发生什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在malloc期间内核中会发生什么?

当用户空间应用程序调用时

malloc()
,该调用未在内核中实现。相反,它是一个库调用(实现的glibc或类似方法)。

简短的版本是

malloc
glibc 中的实现要么通过
brk()
/
sbrk()
system调用获取内存,要么通过
mmap()
。这为glibc提供了一个很大的连续(相对于虚拟内存地址)的内存块,该
malloc
实现将实现进一步切成小块并将它们切成小块,然后分发给您的应用程序。

这是一个小

malloc
实现,它将为您提供想法,以及许多链接。

请注意,还没有什么东西在乎物理内存-当通过

brk()
/
sbrk()
或更改过程数据段
mmap()
,以及在引用内存(通过对内存的读取或写入)时,内核虚拟内存系统会处理该内存。

总结一下:

  1. malloc()
    将搜索其托管的内存,以查看是否有一块满足分配要求的未使用的内存。
  2. 如果失败,
    malloc()
    将尝试扩展过程数据段(通过
    sbrk()
    /
    brk()
    或在某些情况下
    mmap()
    )。
    sbrk()
    最终进入内核。
  3. 内核中的
    brk()
    /
    sbrk()
    调用会调整
    struct mm_struct
    流程中的某些偏移,因此流程数据段会更大。首先,将没有物理内存映射到扩展数据段所提供的其他虚拟地址。
  4. 当第一次触摸到未映射的内存时(可能是实现的读/写操作
    malloc
    ),故障处理程序将启动并进入内核,在内核中内核将为未映射的内存分配物理内存。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/405769.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号