关注
当你尝试在只有2GB物理内存的系统中使用malloc分配4GB内存时,实际结果取决于系统的虚拟内存和交换空间(swap space)配置。以下是可能发生的情况:
1. 虚拟内存允许:在大多数现代操作系统中,虚拟内存机制允许分配的内存量超过物理内存。这意味着操作系统将使用硬盘作为“交换空间”来补充物理内存。当物理RAM不足以容纳所有当前活跃的内存页面时,操作系统会将一些不常用的数据移动到交换空间,释放物理内存供其他程序使用。
2. 内存过载(Overcommitment)和OOM Killer:Linux系统默认允许内存过载,即允许分配的总虚拟内存量超过物理内存加上交换空间的总和。系统认为不会所有分配的内存都会被实际使用。但如果所有程序都试图使用其分配的内存,将触发OOM(Out-Of-Memory)Killer,由系统决定杀掉一些进程以释放内存。
3. malloc返回NULL:如果系统的虚拟内存加上交换空间还是不足以分配4GB内存,malloc将无法分配内存并返回NULL。这是告诉你的程序无法分配所需的内存空间。
从Linux系统调用的角度来看malloc过程:
- malloc调用:当你在程序中调用malloc时,库函数最初可能不会立即从操作系统请求内存。C库通常有一个内存池来优化小块内存的分配效率。如果请求的内存超过了某个阈值(例如,使用mmap的阈值),malloc就会调用内核。
- brk和mmap系统调用:对于较大的内存请求,malloc通常使用mmap(文件映射)系统调用来映射匿名页面,这不增加传统的程序数据段的大小。对于较小的请求,malloc可能使用brk系统调用来扩展或减少进程的数据段(heap)。
在使用mmap时,操作系统会创建一个虚拟地址空间,实际的物理内存分配可能会推迟到程序访问这些地址时才发生,这是按需分页(demand paging)的一个特点。即使malloc返回了一个有效的指针,也不意味着等同于物理内存已经被分配,真正的分配发生在虚拟页首次被访问时,此时如果物理内存不足,操作系统会从交换空间映射或换出一页内存。
总结一下,如果在只有2GB物理内存的系统中请求malloc分配4GB内存,操作系统和C库将使用虚拟内存机制来尝试满足请求。成功与否取决于系统的交换空间大小和OVERCOMMIT的设置。在内存实际耗尽之前,很可能malloc成功,但进程在实际使用内存时可能会变得非常缓慢,因为操作系统需要频繁地进行页面交换。如果内存使用超出了可用的虚拟内存和物理内存的总和,可能导致内存分配失败或系统启动OOM Killer。
来自gpt4的简单回答
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
04-26 18:48
成都锦城学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
- 1... 27双非ue游戏客户端大失败经历4768
- 2... 作为一个老登,最烦应届生问的问题之一3087
- 3... 逆天老师,逆天领导,被我回怼一句话后破防了,要把我开除了2622
- 4... 各位都是怎么出去实习的2311
- 5... 5.18字节(中国广告与交易)75分钟2203
- 6... 双非想拿腾讯offer,会被卡学历吗?2025
- 7... 理性讨论,卷实习算不算工贼行为?1931
- 8... 三段大厂,说下我见过的最低学历1777
- 9... 【5.21更新】26春招毁约毁意向裁员黑名单公司,为找工作尽一份绵薄之力!1739
- 10... 26博士求职竟然也难1568
正在热议
更多
# 如何成为1个AI工程师? #
7901次浏览 346人参与
# 绿盟笔试 #
5850次浏览 56人参与
# 26届春招投递记录 #
43471次浏览 358人参与
# 我想去国央企的原因 #
81074次浏览 423人参与
# 27届实习投递记录 #
133003次浏览 1466人参与
# 选实习,你更看重哪方面? #
84512次浏览 522人参与
# 工作压力大,你会干什么? #
86620次浏览 725人参与
# 机械/制造每日一题 #
99583次浏览 1506人参与
# 毕业季,给职场新人一些建议 #
226219次浏览 2618人参与
# 小米编程考试 #
42138次浏览 159人参与
# 你觉得机械有必要实习吗 #
89752次浏览 540人参与
# 我在大厂见过的最低学历 #
9151次浏览 82人参与
# 机械人,说说你的烦心事 #
152330次浏览 1191人参与
# 除了线上,还能去哪些地方投简历 #
24345次浏览 160人参与
# 面试被问期望薪资时该如何回答 #
407587次浏览 2224人参与
# 你觉得第一学历对求职有影响吗? #
278126次浏览 1502人参与
# 你面试被问到过哪些不会的问题? #
124586次浏览 1950人参与
# 秋招拿一个offer可以躺平吗 #
278903次浏览 1417人参与
# 虹软科技求职进展汇总 #
18917次浏览 141人参与
# 机械人你觉得今年行情怎么样? #
10249次浏览 100人参与