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

文 | 小林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!

【金标陈酿:漩涡中的光瓶酒之王,牛栏山开辟新曲线 |走进新国标】本文由XN知酒原创 未经授权 不得转载
文 | 知酒团队(ID:XNzhijiu)
值班编辑 | 小知

纯粮陈酿更地道,感受《新国标》下民酒牛栏山的自我嬗变。——编者按
《新国标》出来后,百亿级别牛栏山成为被媒体口诛笔伐的对象。我们来看一些标题《白酒新国标发布:“牛栏山陈酿”从此不再是白酒?酒友:做得好!》《重磅:白酒新国标发布,江湖再无白牛二!》《白酒新国标:牛栏山成“反面教材”?》。所有的内容的都是准确的,但基本上还缺乏全面性,一是少了对调香白酒的合法性解释;二是忽视了政策落地后的市场渐变过程。#走进新国标传送门:2.《押宝百元的江小白,怎么回事?|走进新国标》》4.《酒业新物种加码清香,光瓶赛道现“甲等”好选手 |走进新国标》《新国标》的出现,提升白酒行业的门槛,目的是规范和促进白酒产业的升级,这无疑是一大利事。毫无疑问,不符合标准的企业都将受到冲击,但在这个背景下,也更应该看到企业探寻向上增长的力量。牛栏山此前推出的“金标陈酿”,被视为是应对新国标政策的布局,行业人士称其是“自救”行为。在XN知酒看来,这更是民酒之王牛栏山的第二曲线。“围攻牛栏山”
在新国标出台之前,白酒是可以添加某些符合规定的添加剂的,主要是低端酒用来控制成本。但是与此同时,也有部分企业非法添加制作假酒,危害人体健康,破坏行业秩序。《新国标》将调香白酒单独列出,就是为了规范行业乱象。俗称“白牛二”的牛栏山白瓶二锅头就是典型,按定义属于调香白酒。它之所以成为不可绕过的讨论案例,主要源于其庞大的销量和规模:据顺鑫农业2021年报显示,牛栏山陈酿系列销售量为43.5万千升,仅42°陈酿销售量就达到了39.5万千升,相当于8亿瓶。也就是说,牛栏山一款产品干过了贵州一个省的酱酒的销量,何其厉害?▲被热议的牛栏山从去年新国标即将实施的消息传出之后,对于牛栏山的议论就甚嚣尘上,也曾显著影响股价。这些误读总结下来,就是调香白酒没有未来了。对于这个问题,我们要用理性的态度看待。有两个问题需要明确:调香白酒是否符合食品安全?什么人在喝调香白酒?对于第一个问题,可以给出肯定的回答。新国标将调香白酒归属为配制酒,是为了将其与白酒类别明显区分开来。但是,调香白酒依旧是得到国家认可的。纯粮固态和液态法两种酿造工艺,都是符合相应国标标准的。调香白酒的主要消费群体为普通人民群众,以城市外来务工人员和中低收入人群为主,其消费比较刚性,受《新国标》的影响较小。目前,这类人群的数量依然非常庞大,这意味着以调香白酒为代表的低档白酒仍有巨大的市场空间。也就是说,调香白酒依然是被国家认可的。新国标的施行可以让消费者对白酒的体系更加了解,自然会使制假造假和工艺不过关的酒厂遭到淘汰,但是工艺合格的调香白酒不会受到大的影响。XN知酒今日采访北京、安徽等地牛栏山经销商得到情况与之类似,除受疫情影响外,白牛二的销售并没有被冲击。唯有魔法可以打败魔法在酱酒、名酒和高端化齐震的时代,牛栏山在行业发展趋势上并不占优,因此从业绩来看,也呈现出增长乏力的特征,这也是其陷入漩涡的另一个重大原因。可以说,其成也民酒定位,困也民酒定位。事实上,行业采取调香白酒工艺的产品还有很多,包括老村长多数产品、泸州老窖老二曲(已停产)、剑南春绵竹大曲和枝江大曲(已停产)等。显然牛栏山白牛二不会停产,其选择的道路是另辟成长曲线塑造向上的品牌力量。为应对变化和发展机遇,牛栏山酒厂已正式推出符合新国标的“金标陈酿”,主打“纯粮陈酿更地道”。从目前的宣传画面来看,“纯粮”是金标陈酿的醒目标签,代表了其两谷三米的优质原料和固态发酵的酿造工艺,但对于坚持品质为先,深耕大众市场的牛酒而言,“纯粮”仅仅是入门标准,金标陈酿的优良品质和价值内涵还需要“陈酿”与“地道”来进一步诠释,完成光瓶酒领域“纯粮固态”与“新工艺技术”的“双轮驱动”。在《新国标》中,“陈酿”是被特别提及的工艺,指在贮酒容器中贮存一定时间,使酒体协调、口感柔和的白酒生产中必要的工艺过程。金标陈酿不仅突出了优化酒体口感的酿酒工艺,更是对牛酒坚守匠心精神,坚持严苛工艺的生动呈现,坚守卓越品质,提供品质保障也是牛酒对全体经销商与广大消费者不变的承诺。据了解,目前该产品正在进入牛栏山庞大的渠道进行线下推广,暂无线上发售计划。而从网上流出的价格可以看出,该产品定价处于高线光瓶酒的区间,也可以看作是一次牛栏山的产品结构升级。这像极了淘宝和天猫的关系,在创立淘宝后,由于其引入的是小商,假货、劣质货物等低价商品充斥,这一度成为马云的困扰,在一个开放的平台进行打架毫无疑问是不可能的,最终马云另创一个“天猫”,提高门槛表示选真品到天猫,最终实现了两个平台的成功,也对应满足了不同的消费需求和完成阿里巴巴的升级。白牛二和金标陈酿,就是这种关系,对应不同的消费群,如果得以成功,不失为牛栏山开启新增长的周期。渠道和产能跟得上吗?
不容忽视的是,金标陈酿的最大优势是牛栏山的全国化渠道。无论是牛栏山的“故乡”京津还是南方地区,牛栏山都有着强大的市场号召力。实惠的价格和民酒的品牌导向让陈酿能够与广大消费者产生较强的情感共鸣,拥有广阔的复购群体。“金标陈酿”作为传统陈酿的升级产品,已经具备了“上马能战”的先机。

在XN知酒看来,在重要结构性转型战略窗口期进行转变,对于牛栏山来说也是一件好事情。
牛栏山销量稳定的关键,就是品质背后的工艺和技术支撑。 牛栏山将传统酿造工艺与现代微生物发酵技术有机融合,用固态法基酒进一步提升了酒体的醇厚度,采用地域特有的发酵菌群、发酵环境和满富岁月积淀的发酵设施,使其具备牛酒特色的浓郁窖香。 此外,金标陈酿还借助计算机自动化组合数据的准确性与严谨性实现规模化生产,利用规模效应提升产品性价比,在最大程度让利于消费者的同时,确保每一批次产品品质的内在稳定性,实现了规模化生产下的原粮精酿品质。庞大的销量需要强大的产能做支撑。据2021年年报显示,牛栏山酒厂设计产能810,000千升,实际产能644,632千升。据了解,牛栏山的母公司顺鑫酒业一直将发展成为在全国拥有多个种植基地、生产基地、自主白酒品牌子公司的酒业集团作为目标。除了原产地北京顺义以外,2012年,牛栏山酒厂在河北香河成立了生产基地。2017年,牛栏山酒厂在成都投资白酒生产基地,成立了成都顺牛酒业有限责任公司。五年来,顺牛酒业已经完成了三期建设,四期建设预计2023年6月底前建成投入使用。届时,顺牛酒业的生产能力,产品品质以及员工生活条件等都将得到进一步提高。2019年,牛栏山宣布进军山西吕梁,并在此建设了全国第四个生产基地。四大生产基地不仅使牛栏山的全国化进程得到了保障,也是牛栏山纯粮酿造酒看得见的底气。知酒快评
牛栏山(金标陈酿)给新国标实践带来的启示:(1)产品转型升级牛栏山有着庞大的消费人群,但他们对价格的敏感性使牛栏山在定价上格外谨慎。体量庞大的牛栏山一直将低端产品作为主流,自然会导致利润远不及其他白酒头部企业。这个“隐痛”,其他主打低端产品的酒企也需要思考。想要在成本走高的情况下保证生存、获得利润,产品结构是必须要调整的。(2)工艺为基、品质为王在“纯粮固态”与“新工艺技术”双轮驱动下,金标陈酿得以面世,而这也是牛酒在光瓶酒领域称霸的底气。实际上,不论是新国标定义下的白酒或者调香白酒,都不能一味靠人工添加来改善口感,工艺和品质始终是白酒的灵魂。(3)强悍的供应链体系过去,勇于担当的牛栏山引领了行业内光瓶酒的发展导向,完备的产业链的联结了成千上万的供应商、经销商以及上亿名消费者。无论是经销商还是消费者,都具备很强的黏性。

是这样的,我只是一个刚开始做饭的新厨子,起初只是灵光一现想了个梗就激情开文了,没想到有这么多人看,还有宝宝私信我夸夸,我真的很感激每一位看我文、支持我的宝宝。
做饭不易,每位妈咪的创作都值得尊重。你看到的每一篇或许都是妈咪们经过反复修改纠结花了很多心思完成的。更多的互动对我来说是一种肯定和动力。
但是今天发现有人在一些群里分享我文链接以及其他很多妈咪的。
分享无可厚非,但是如果要分享的话也请分享原微博的链接。
虽然都加上了各位妈咪的ID,但是我想应该几乎没有人看完文之后能再去妈咪们的微博支持她们。
我脾气很好,但还是会觉得有点生气,因为这样有些不太好,我觉得这不太尊重人。但也并不是挂或者其他,而是我觉得应该避免这样的事情发生。
辛辛苦苦做饭,只是想得到一些鼓励和肯定,所以我希望以后不要再有这样的事情发生了。


发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • 值不值时间是最好的用微笑宣泄悲伤,用沉默装点痛苦,哪怕是假装,也要假装成快乐的那一个,人生的路你不坚强,没人替你勇敢!人只有在最黑暗的时候,才会知道光明的美好,
  • 今天and前些天有些些伤感了 师兄师姐们今天拍照 那我当然得去蹭一个 今年学校的仪式感真的很强 日月喷泉竟然开了 今晚是最后一次实验室pa了 且吃且珍惜咯
  • ˗ˏˋˎˊ˗十月二日 又是从早黏到晚的一天小陈想看长津湖 看之前渴了买杯奶茶喝喝呗(总要有仪式感哈哈哈)看完电影回家做煲仔饭本可爱掌握的火候刚刚好[鼓掌]接着
  • 贵阳人把血旺分成薄皮旺、嫩旺、千层旺和老旺,老旺是外地人吃的全熟的猪血,薄皮旺是最生的血旺,只是轻轻地在水上一烫,外面形成了一层薄片,爆开之后里面仍是浆状,向来
  • ​一款专为力量举设计的健身包-A7 U Bag健身包,本周六上午10点,现货发售。我们设计了一款背包,让您可以在旅行、去健身房、学校或生活中的任何地方时将贵重
  • 通过这段时间体验JBL Live Free 2,佩戴体验感非常好,并不会感觉有异物感或者很闷。#蓝牙耳机#作为HIFIMAN第一款R2R架构的集合解码与耳放桌面
  • 努力了这么久,相信梦想的彼岸就在不远处,不过是时间还不够,努力还不够,成长还不够。#阳光信用[超话]#[水稻]#阳光信用# 面对困难、挫折、挑战只要你肯相信自我
  • 1、圣诞节[猪头]:圣诞快乐!送了她喜欢的口红(香奈儿70口红)[兔子]:这个就当生日礼物了,生日不要送我了2、春节[猪头]转账五百二[兔子]:退还,并说不要这
  • 5、无油墨,与宝宝身体接触的部位均无印刷,更少致敏源,更多安全感#花式比心#一直想要的内心平静,在最近一段时间好像有点剑走偏锋,达到了冰点。♡有关洞洞的解释有
  • 但是换了菲诗蔻我都忘了头皮痒是啥感觉了!另外它还主打去屑止痒,这一点我也很有发言权!
  • 今天我就专门针对 ,我们准备装修或正在担心设计出来的方案 、效果图 ,能不能 一比一还原 ,其实在我没接触这行装修房子的时侯,我也在担心。#装修##装修设计#
  • 刚刚结束的这个赛季里,虽然他不是皮奥利麾下的绝对主力,但他的表现已经征服了俱乐部管理层和教练组,球员在球场上多位置的属性备受青睐。其实在2018年夏天,他就曾拒
  • 这边的香干没有老家的那种味道,普普通通。淮山切片滚了一个鸡蛋汤,忙碌的日子,安静的做饭能为生活增添一份平静。
  • 所以,晓玲或者说贾玲根本就在说谎,李焕英并非如同影片中那般欣赏孩子晓玲,甚至可能在生活中不止一次地说过“你看看人家琴姨的女儿……”而影片出于纪念意义,美化了母亲
  • 传说王母娘娘身边有一个吹笙的仙女,厌倦了天庭生活,喜欢凡间山水,一日来到祖山游玩,发现山好水好,惟独缺少奇花异草,于是把天庭瑶池的木兰花移摘祖山。一日,正逢王母
  • 【超八成美国人认为美国经济表现不佳】Environ 83 % des sondés ont estimé que l'économie américaine é
  • 因此,甲公司又征求孙建美律师的意见:在“乙负责运营的M店业绩连续不达标,乙的个人业绩一直处于全公司最末段,M店下的一个M1专柜因广告违规被平台处罚、关闭,一个M
  • (记者 朱思洋)#青岛·城事#【今天起,青岛森林野生动物世界免门票开放】为进一步满足市民游客出行需求,在做好疫情防控工作的前提下,西海岸新区将深受市民游客欢迎的
  • 一般人的生活枯燥,只是因为他们的“半亩方塘”中没有天光云影,没有源头活水来,这源头活水便是领略得的趣味。一个优秀的演员要有丰富而炽烈的情感,能哭能笑、敢爱敢恨。
  • 基本款:吃点好的,穿点好的,用点好的,别不舍得花,都是身外之物。他还温柔地对我笑诶[苦涩][苦涩][苦涩]今天618活动还满减80……啊这,感觉不下单都对不起我