问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

linux用户空间内存原则?

发布网友 发布时间:2022-04-21 10:25

我来回答

1个回答

热心网友 时间:2023-10-18 23:05

在用户空间中动态申请内存的函数为malloc (),这个函数在各种操作系统上的使用都是一致的,malloc ()申请的内存的释放函数为free()。对于Linux而言,C库的malloc ()函数一般通过brk ()和mmap ()两个系统调用从内核申请内存。由于用户空间C库的malloc算法实际上具备一个二次管理能力,所以并不是每次申请和释放内存都一定伴随着对内核的系统调用。如,应用程序可以从内核拿到内存后,立即调用free(),由于free()之前调用了mallopt(M_TRIM_THRESHOLD,一1)和mallopt (M_MMAP_MAX,0),这个free ()并不会把内存还给内核,而只是还给了C库的分配算法(内存仍然属于这个进程),因此之后所有的动态内存申请和释放都在用户态下进行。另外,Linux内核总是采用按需调页(Demand Paging),因此当malloc ()返回的时候,虽然是成功返回,但是内核并没有真正给这个进程内存,这个时候如果去读申请的内存,内容全部是0,这个页面的映射是只读的。只有当写到某个页面的时候,内核才在页错误后,真正把这个页面给这个进程。在Linux内核空间中申请内存涉及的函数主要包括kmalloc( ) 、get free pages ( )和vmalloc ()等。kmalloc ()和_get_free pages ()(及其类似函数)申请的内存位于DMA和常规区域的映射区,而且在物理上也是连续的,它们与真实的物理地址只有一个固定的偏移,因此存在较简单的转换关系。而vmalloc()在虚拟内存空间给出一块连续的内存区,实质上,这片连续的虚拟内存在物理内存中并不一定连续,而vmalloc ()申请的虚拟内存和物理内存之间也没有简单的换算关系。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
特别精辟的个性签名(非常经典的个性句子) 特别经典的个性签名(非常惊艳的个性句子) 文艺范十足的个性签名(温柔治愈的个性签名句子) wps文字怎么设置每页头和尾 27岁的女人需要补充哪些营养元素 27岁该重视美容了吗?都可以用哪些方法好些呢? airpods连不上手机怎么回事 - 知百科 腰肌劳损能养好吗? 有一段相声讲的是原始人打猎,唱歌,学说话的,请问名字是什么? 个人征信逾期记录的修复攻略,手把手传授 Linux下如何释放内存,swap分区满了怎么办 如何释放linux cache占用的内存 linux采用什么方法实现内存的分配和释放,数据结构 如何手工释放linux内存 Linux进程内存如何管理? linux如何清理内存 linux采用什么方法实现内存的分配和释放 linux 如何释放虚拟内存 linux上如何闭掉一部分内存 如何为linux释放内存和缓存 如何在Linux操作系统中手工释放内存缓存 Linux用户进程是如何释放内存的 linux 清除缓存 释放内存 linux占用内存太高,有没有好的解决办法呀? Linux内核中如何申请和释放内存? 电脑硬盘温度过高怎么办原因及解决方法 凹凸世界所有人物的元力是什么? 《凹凸世界》真的存在吗? “凹凸世界”的角色介绍? 《凹凸世界》秋的真实身份是什么? 如何降低Linux内存开销 OPPO a5清除数据还要密码怎么办? oppoa5手机原始密码是多少? oppoa5强制解锁 OPPO a5手机清除数据要密码? OPPO手机锁屏密码忘了,点击那个清除数据为什么还要输入锁屏密码? oppoa5手机图案密码忘了,清楚数据要图案密码? OPPOA5重启清理的时候需要密码,该怎么办 捡到的oppoa5忘了密码怎么清除数据? oppoa5密码忘了怎么清除密码数据 linux如何调整分区大小? 系统管理:如何调整Linux磁盘分区的大小 linux分区大小调整 linux如何修改磁盘分区大小 如何调整Linux磁盘分区的大小 linux怎样无损调整分区大小 linux已经分区,想增大一个分区的容量怎么办 linux如何不重启调整分区大小 Ubuntu下如何调整主分区大小 linux修改分区的大小