首页
题库
面试
求职
课程
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你说说 malloc 的实现原理
[问答题]
请你说说 malloc 的实现原理
添加笔记
求解答(0)
邀请回答
收藏(94)
分享
纠错
10个回答
添加回答
13
英俊的柠檬精在写周报
malloc 函数的实质是它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。 调用 malloc()函数时,它沿着连接表寻找一个大到足以满足用户请求所需要的内存块。(如果没有搜索到,那么就会用sbrk()才推进brk指针来申请内存空间)。 然后,将该内存块一分为二(一块的大小与用户申请的大小相等,另一块的大小就是剩下来的字节)。 接下来,将分配给用户的那块内存存储区域传给用户,并将剩下的那块(如果有的话)返回到连接表上。 调用 free 函数时,它将用户释放的内存块连接到空闲链表上。
发表于 2022-07-15 20:17:26
回复(0)
4
牛客672507979号
1. 当开辟的空间小于 128K 时,调用 brk()函数,malloc 的底层实现是系统调用函数 brk(),其主要移动指针 _enddata(此时的 _enddata 指的是 Linux 地址空间中堆段的末尾地址,不是数据段的末尾地址) 2.当开辟的空间大于 128K 时,mmap()系统调用函数来在虚拟地址空间中(堆和栈中间,称为“文件映射区域”的地方)找一块空间来开辟。
发表于 2022-08-24 17:10:52
回复(0)
2
牛客965539880号
malloc基本的实现原理维护一个内存空闲链表,调用 malloc()函数时,它沿着连接表寻找一个大到足以满足用户请求所需要的内存块 将该内存块一分为二(一块的大小与用户申请的大小相等,另一块的大小就是剩下来的字节),将分配给用户的那块内存储存区传给用户,并将剩下的那块返回到连接表上。调用free函数时,他将用户释放的内存块连接到空闲链表上。小于128K的时候调用brk()函数,大于128K时系统调用mmap()在虚拟内存地址空间中找一块空间来开辟
发表于 2022-08-31 16:31:54
回复(0)
1
羊翻翻会幸福的
malloc() 基本的实现原理就是维护一个内存空闲链表,当申请内存空间时,搜索内存空闲链表,找到适配的空闲内存空间,然后将空间分割成两个内存块,一个变成分配块,一个变成新的空闲块。如果没有搜索到,那么就会调用 sbrk() 推进 brk 指针来申请内存空间。 接下来,将分配给用户的那块内存存储区域传给用户,并将剩下的那块(如果有的话)返回到连接表上。 调用 free 函数时,它将用户释放的内存块连接到空闲链表上。
发表于 2023-07-26 16:56:50
回复(0)
1
寻工作浩
为什么没人看吗
发表于 2022-06-09 14:25:12
回复(1)
0
_helios_
malloc() 的整体思想是先向操作系统申请一块大小适当的内存,然后自己管理,即内存池。 malloc() 基本的实现原理就是维护一个内存空闲链表,当申请内存空间时,搜索内存空闲链表,找到适配的空闲内存空间,然后将空间分割成两个内存块,一个变成分配块,一个变成新的空闲块。如果没有搜索到,那么就会调用 sbrk() 推进 brk 指针来申请内存空间。
发表于 2024-05-17 10:53:23
回复(0)
0
雏鹰划空
1. malloc(),向操作系统申请一大块内存,自己进行管理,也就是内存池管理。 2. malloc(),返回的每个内存块都相当于一个数据结构,其中包括着临近内存块的地址,本内存块的大小,而且是内存对齐的。 3. 每一个malloc()内存块实际上连成了一个链表,free链表。 4. 每次申请,就从链表中找到一块合适的内存返回;释放,就把内存块放到空闲链表上。 5. 涉及的算法:区间合并、首次适配、最佳适配、下一次适配等。
发表于 2023-11-09 22:02:34
回复(0)
0
keepgoing_
malloc底层主要由2种系统调用brk()和mmap()实现, 当申请的内存小于128k时,采用brk()申请内存,通过将堆顶指针向上移动获得内存空间,通过brk申请的内存,在free释放内存时,不会把内存理解归还给操作系统,而是作为内存池待下次使用; 当申请的内存大于128k时,采用mmap申请内存,mmap在文件映射区申请内存,通过mmap申请的内存,在free释放内存后,会把内存理解归还给操作系统。
发表于 2023-10-24 11:46:11
回复(0)
0
hcodeboy
malloc 是单纯的在堆区开辟一块指定大小的内存
发表于 2023-08-12 11:22:13
回复(0)
0
山上的菜鸟
STL里面的allocator是有多个链表的。
发表于 2022-10-18 10:43:52
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
操作系统
上传者:
real19931
难度:
10条回答
94收藏
2775浏览
热门推荐
相关试题
请编写实现malloc()内存分配...
微软
C++
操作系统
评论
(3)
有两个N*N的矩阵A和B,想要在P...
阿里巴巴
操作系统
评论
(38)
来自
阿里巴巴2015实习生笔试题
虚拟存储器不能解决的问题是()
操作系统
评论
(4)
关于进程的状态和状态转换,下列哪一...
操作系统
评论
(1)
细胞周期中属于DNA合成期的是:
细胞生物学
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题