[话筒]【GFY电子竞技俱乐部人员变动公告】
在充分尊重选手个人意愿的前提下,经过多方友好协商与沟通后,今天,我们很荣幸的向大家宣布:
PCS3冠军选手余川(ID:summer)正式加入GFY电竞俱乐部,与GFY携手征战往后的PUBG相关赛事。
探虎穴兮入蛟宫,仰天呼气兮成白虹。
期待summer选手的加入能让世界看到不一样的GFY。
欢迎summer加入GFY大家庭,未来我们一同奋斗!
#GFY电子竞技俱乐部[超话]#

#Mingyu金珉奎[超话]# kmg#金珉奎人间雕塑#
【220612】wvs更新 珉奎相关

SEVENTEEN ‘HOT’ MV Behind Sketch

#转载请注明出处
[金chef的心动食谱:https://t.cn/A6MtXBUV ]
[✨珉奎个人彩色️ID: min9yu_k ]
[招新公告: https://t.cn/A6xo785B ]
[ 2022生日support汇总: https://t.cn/A66HcoPC]

【关于内存管理:争议很大的问题】

文 | 小林coding

出品 | 小林coding(ID:CodingLin )

已获得原公众号的授权转载

早上看到读者在群里讨论这些面试题(下图1):

其中,第一个问题「在 4GB 物理内存的机器上,申请 8G 内存会怎么样?」存在比较大的争议,有人说会申请失败,有的人说可以申请成功。

这个问题在没有前置条件下,就说出答案就是耍流氓。因为在 32 位操作系统和 64 位操作系统场景下,答案是不同的。

另外,我们还要看申请完 8G 内存后会不会被使用,会被使用是一种情况,不会被使用又是另外一种情况了。

所以,我们要分场景讨论。

正文
应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。

当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的 Page Fault Handler (缺页中断函数)处理。

缺页中断处理函数会看是否有空闲的物理内存:

如果有,就直接分配物理内存,并建立虚拟内存与物理内存之间的映射关系。
如果没有空闲的物理内存,那么内核就会开始进行回收内存的工作,如果回收内存工作结束后,空闲的物理内存仍然无法满足此次物理内存的申请,那么内核就会放最后的大招了触发 OOM (Out of Memory)机制。
32 位操作系统和 64 位操作系统的虚拟地址空间大小是不同的,在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,如下所示:

通过这里可以看出:

32 位系统的内核空间占用 1G,位于最高处,剩下的 3G 是用户空间;
64 位系统的内核空间和用户空间都是 128T,分别占据整个内存空间的最高和最低处,剩下的中间部分是未定义的。
现在可以回答这个问题了:在 32 位操作系统、4GB 物理内存的机器上,申请 8GB 内存,会怎么样?

因为 32 位操作系统,进程最多只能申请 3 GB 大小的虚拟内存空间,所以进程申请 8GB 内存,在申请虚拟内存阶段就会失败(我手上没有 32 位操作系统测试,我估计失败的原因是 OOM)。

在 64 位操作系统、4GB 物理内存的机器上,申请 8G 内存,会怎么样?

64 位操作系统,进程可以使用 128 TB 大小的虚拟内存空间,所以进程申请 8GB 内存是没问题的,因为进程申请内存是申请虚拟内存,只要不读写这个虚拟内存,操作系统就不会分配物理内存。

我们可以简单做个测试,我的服务器是 64 位操作系统,但是物理内存只有 2 GB。
图2

现在,我在机器上,申请 4 GB 内存,注意下面代码只是单纯分配了虚拟内存,并没有使用该虚拟内存:

#include
#include
#include
#include
#include

int main() {

int ret;

char* addr[4];

printf("使用cat /proc/%d/maps查看内存分配\n",getpid());

size_t s = 1024 * 1024 * 1024;

int i = 0;

for(i = 0; i < 4; ++i) {

printf("alloc size = %d\n", s);

addr[i] = (char*) malloc(s);

printf("主线程调用malloc后,申请1gb大小得内存,此内存起始地址:0X%x\n", addr[i]);

}

getchar();

return 0;
}
然后运行这个代码,可以看到,我的物理内存虽然只有 2GB,但是程序正常分配了 4GB 大小的虚拟内存:


我们可以通过下面这条命令查看进程的虚拟内存大小:

# ps aux | grep alloc_4g
USER

PID %CPU %MEM

VSZ

RSS TTY

STAT START

TIME COMMAND
root

7797 0.0 0.0 4198540 352 pts/1

S+

16:58

0:00 ./alloc_4g
其中,VSZ 就代表进程使用的虚拟内存大小,RSS 代表进程使用的物理内存大小。可以看到,VSZ 大小为 4198540,也就是 4GB 的虚拟内存。

然后,我们改一下代码,在申请完虚拟内存后,通过 memset 函数使用这个虚拟内存,看看会发生什么。

#include
#include
#include
#include
#include

int main() {

int ret;

char* addr[4];

printf("使用cat /proc/%d/maps查看内存分配\n",getpid());

size_t s = 1024 * 1024 * 1024;

int i = 0;

for(i = 0; i < 4; ++i) {

printf("alloc size = %d\n", s);

addr[i] = (char*) malloc(s);

printf("主线程调用malloc后,申请1gb大小得内存,此内存起始地址:0X%x\n", addr[i]);

//访问虚拟内存

memset(addr[i], 0, s);

}

getchar();

return 0;
}
运行结果:

图4

可以看到,在申请了 2GB 虚拟内存后,然后马上使用了这块虚拟内存,由于这台机器的物理内存只有 2 GB,所以发生了 OOM。

至此, 验证完成了。简单总结下:

在 32 位操作系统,因为进程最大只能申请 3 GB 大小的虚拟内存,所以直接申请 8G 内存,会申请失败。
在 64位 位操作系统,因为进程最大只能申请 128 TB 大小的虚拟内存,即使物理内存只有 4GB,申请 8G 内存也是没问题,因为申请的内存是虚拟内存,等这块虚拟内存被访问了,因为物理空间不够,就会发生 OOM。

https://t.cn/A6XkOzhh

namo-amitabhaya!


发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • 央行数据显示,FDI-境外公司和个人在本国的投资-凈流入六十五亿四千二百万美元,比二零一九年的八十六亿七千一百万美元减少百分之二十四点六。」央行说,特别的是外国
  • 不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。不埋怨谁,不嘲笑谁,也不羡慕谁,阳光下灿烂,风雨中奔跑,做自己的梦,走自己的路。
  • 18、永远不要因为你花三分钟看过的文章,去否定一个别人喜欢了好多年的人。6、外界的声音都是参考,你不开心就不要参考。
  • 我想去流浪,独自一个人去流浪 我想去西格里拉的大街上听听是否有人在歌唱 因为你说,这首歌在香格里拉的街上循环播放 听说这是离天堂最近的地方,触手我是否摸到幸福的
  • 白露到来,棉桃由绿变黑,由黑变干,渐渐张#情感语录##慕浠奶片##波士度减肥巧克力##朴塑益生菌#▫️◽️◻️初秋的风缓缓的往窗内送,有秋夜的凉爽,窗外星辰漫天
  • #刘宇宁鲜厨100# [音乐]#刘宇宁长歌行# [音乐]#摩登兄弟[超话]# 喜欢宁灿烂的笑容 想唱情歌给你听 喜欢宁爱笑的眼睛 心里为你着了迷为你等待 为你
  • #剑网3[超话]##剑三捏脸##剑网三捏脸# 捏脸集合P1【藏锋】是我入游戏来第一个捏脸;P2【红月】试一试刀疤仔;P3【爪爪】想尝试可爱风;P4【不高兴】因为
  • [鼓掌]#尚雯婕[超话]#把自己置身于古代文人的思想角度,与当代音乐进行碰撞,创造出属于当下时代专属于尚雯婕的“新国风电子”风格~#PRINTEMPS钟爱# L
  • 我收藏了好多好多的地方,不管怎样把都要去看一看,每天上秤警示自己尽快抓紧时间减肥[嘘]不想以后等着等着日子走散了,勇气也没了欲买桂花同载酒 终不似 少年游 但心
  • 地铁上,一位年轻的孕妈走进了车厢,站在一位中年大姐身旁,大姐却在众目睽睽之下做了这样的事情。一位坐在座位上的红衣大姐,抬头看见了站在旁边的孕妈,善良的大姐毫不犹
  • 虽然有错过7月到8月间三伏天的旺季行情,但股市养家的理念就是以稳为主,而在市场情绪达到高峰前就落袋为安自然更为稳妥,因为市场永远不缺机会,而每个机会都有稳定与不
  • 前边提过,俄国也是现代主义的发源地,但斯大林时代苏联的现代主义发展的并不好,原因其实很简单,因为俄国是当时欧洲两极分化最严重的国家之一,精英阶层跟底层群众几乎完
  • 因为是租的房子就没有很用心的 ​#拜托了冰箱# 麒麟在参加《拜托了冰箱》里展示了自己日常的消费观,一些小细节也是像极了生活中的我们在何炅问到怎么没有好好装饰一下
  • 10月27日上午8:00到康美小区阿家超市购烟,然后乘坐网约车(渝ADB3607)到公司上班,中午和朋友驾车前往渝北区润都7号边至善居餐馆用餐。10月24日上午
  • 法界圣贤没有三界生命有形的躯体,而是纯智慧体展现的“无相光”光明普照十方,上下,前后,左右,四面八方,完整的,系统的,立体的,十法界层层苍茫光明宇宙,是瞬间普照
  • 恢复过程需要时间,不是一个快字就可以承诺的,而是一个科学与诚信的责任,为您负责到健康为止的过程,需要彼此的信任,加油,一切会好的!14 #激素脸治疗方法##拯救
  • #每日一善[超话]# [太阳]#阳光信用# [允悲]#每日一善# 带走那抹妖冶的色彩奔向遥远的彼岸黄泉路上,忘川水畔葬着你依旧的美丽边,刻着你曾经的记忆轮回路途
  • 在爱情里没有先来后到的说法,不是说你爱他多一些就能得到他对你同等的付出,在不爱你的人眼里,你对他的好,反而是一种沉重的负担。努力去做一个温暖的人,用真心对世界微
  • 一些适合九月发的朋友圈文案 1.秋风明月,人间九月。 2.九月始初,词遗暗处。 3.九月,是一行诗,写着潭柘寺的钟声、西湖的残虹,
  • 与大众贴近“同学们,我们现在手中拿到的是鲁班锁,鲁班锁传说是鲁班发明的益智玩具,它采用榫卯结构,不用一颗钉子,就把6根木条组装在了一起,非常牢固,这蕴含着中国工