面试不懂 Linux 内存管理?我用 20 张图给你讲明白

[复制链接]
微信搜索公众号「 后端技术书院 」答复「1024」获得50本计较机电子书,答复「进修线路」获得超具体后端技术进修线路思维导图,文章每周延续更新,我们下期见!
大师好,我是柠檬哥。
分享编程进修,助力法式员长大,下面是往期分享的的内容(点击可检察):
这个大学在Github开源了计较机课程,看完在家上个 985
这个项目开源了500本计较机电子书,再也不用花钱买书了
13万点赞的法式员进修线路!都在这3 张高清思维导图里
Java、C++ 软件开辟完整进修线路,已拿阿里offer
私信答复「1024」可检察和获得以上项目中的资本。



之前写了两篇具体分析 Linux 内存治理的文章,读者好评如潮。但由因而分隔两篇来写,而这两篇内容实在是有很强关联的,有读者反应没有看到另一篇读起来不够不联贯,为方便阅读此次特地把两篇整合在一路,看这一篇就够了!
万字干货长文,倡议收藏后阅读,以下是正文。

对于精通 CURD 的营业同学,内存治理似乎离我们很远,但这个常识点虽然冷门(估量很多人学完底子就没机遇用上)但绝对是根本中的根本。

这就像武侠小说中的内功修炼,学完以后看不到吹糠见米的结果,但对你往后的开辟工作是大有裨益的,由于你站的更高了。

文中一切示例图都是我亲手画的,绘图比码字还费时候,但大师看图了解比笔墨更直观,所以还是画了。需要高清示例图片的同学,文末有获得方式自取。

再功利点的说,口试的时辰不经意间流露你懂这方面常识,而且能说出个一二三来,也许能让口试官对你更有爱好,离升职加薪,走上人生顶峰又近了一步。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-1.jpg

条件约定:本文会商技术内容条件,操纵系统情况都是 x86架构的 32 位 Linux系统。

虚拟地址

即使是现代操纵系统中,内存仍然是计较机中很贵重的资本,看看你电脑几个T固态硬盘,再看看内存巨细就晓得了。

为了充实操纵和治理系统内存资本,Linux采用虚拟内存治理技术,操纵虚拟内存技术让每个进程都有4GB 互不干与的虚拟地址空间。

进程初始化分派和操纵的都是基于这个「虚拟地址」,只要当进程需要现实拜候内存资本的时辰才会建立虚拟地址和物理地址的映照,调入物理内存页。

打个不是很得当的例如,这个道理实在和现在的某某网盘一样。假如你的网盘空间是1TB,真以为就一口气给了你这么大空间吗?那还是太年轻,都是在你往里面放工具的时辰才给你分派空间,你放几多就分几多现实空间给你,但你和你朋友看起来就像大师都具有1TB空间一样。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-2.jpg

虚拟地址的益处

    避免用户间接拜候物理内存地址,避免一些破坏性操纵,庇护操纵系统每个进程都被分派了4GB的虚拟内存,用户法式可利用比现实物理内存更大的地址空间
4GB 的进程虚拟地址空间被分红两部分:「用户空间」和「内核空间」


口试不懂 Linux 内存治理?我用 20 张图给你批注白-3.jpg

用户空间内核空间

物理地址

上面章节我们已经晓得非论是用户空间还是内核空间,利用的地址都是虚拟地址,当需进程要现实拜候内存的时辰,会由内核的「请求分页机制」发生「缺页异常」调入物理内存页。

把虚拟地址转换成内存的物理地址,这中心触及操纵MMU 内存治理单元(Memory Management Unit ) 对虚拟地址分段和分页(段页式)地址转换,关于分段和分页的具体流程,这里不再赘述,可以参考任何一本计较机组成道理课本描写。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-4.jpg

段页式内存治理地址转换
Linux 内核会将物理内存分为3个治理区,别离是:

ZONE_DMA

DMA内存地区。包括0MB~16MB之间的内存页框,可以由老式基于ISA的装备经过DMA利用,间接映照到内核的地址空间。

ZONE_NORMAL

普通内存地区。包括16MB~896MB之间的内存页框,常规页框,间接映照到内核的地址空间。

ZONE_HIGHMEM

高端内存地区。包括896MB以上的内存页框,不停止间接映照,可以经过永久映照和姑且映照停止这部份内存页框的拜候。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-5.jpg

物理内存区分别
用户空间

用户进程能拜候的是「用户空间」,每个进程都有自己自力的用户空间,虚拟地址范围从从 0x000000000xBFFFFFFF 总容量3G 。

用户进程凡是只能拜候用户空间的虚拟地址,只要在履行内陷操纵或系统挪用时才能拜候内核空间。

进程与内存

进程(履行的法式)占用的用户空间依照「 拜候属性分歧的地址空间寄存在一路 」的原则,分别红 5个分歧的内存地区。拜候属性指的是“可读、可写、可履行等 。

    代码段代码段是用来寄存可履行文件的操纵指令,可履行法式在内存中的镜像。代码段需要避免在运转时被不法点窜,所以只准予读取操纵,它是不成写的。数据段数据段用来寄存可履行文件中已初始化全局变量,换句话说就是寄存法式静态分派的变量和全局变量。BSS段BSS段包括了法式中未初始化的全局变量,在内存中 bss 段全数置零。堆 heap堆是用于寄存进程运转中被静态分派的内存段,它的巨细并不牢固,可静态扩大或缩减。当进程挪用malloc等函数分派内存时,新分派的内存就被静态增加到堆上(堆被扩大);当操纵free等函数开释内存时,被开释的内存从堆中被剔除(堆被缩减)栈 stack栈是用户寄存法式姑且建立的部分变量,也就是函数中界说的变量(但不包括 static 声明的变量,static意味着在数据段中寄存变量)。除此之外,在函数被挪用时,其参数也会被压入倡议挪用的进程栈中,而且待到挪用竣事后,函数的返回值也会被寄存回栈中。由于栈的先辈先出特点,所以栈出格方便用来保存/规复挪用现场。从这个意义上讲,我们可以把仓库看成一个寄存、交换姑且数据的内存区。

上述几种内存地区中数据段、BSS 段、堆凡是是被持续存储在内存中,在位置上是持续的,而代码段和栈常常会被自力寄存。堆和栈两个地区在 i386 系统结构中栈向下扩大、堆向上扩大,相对而生。

口试不懂 Linux 内存治理?我用 20 张图给你批注白-6.jpg

你也可以在linux下用size 号令检察编译后法式的各个内存地区巨细:

[lemon ~]# size /usr/local/sbin/sshd   text           data            bss            dec            hex        filename1924532          12412         426896        2363840         2411c0        /usr/local/sbin/sshd内核空间

x86 32 位系统里,Linux 内核地址空间是指虚拟地址从 0xC0000000 起头到 0xFFFFFFFF 为止的高端内存地址空间,总计 1G 的容量, 包括了内核镜像、物理页面表、驱动法式等运转在内核空间 。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-7.jpg

内核空间细分地区.
间接映照区

间接映照区 Direct Memory Region:从内核空间肇端地址起头,最大896M的内核空间地址区间,为间接内存映照区。

间接映照区的896MB的「线性地址」间接与「物理地址」的前896MB停止映照,也就是说线性地址和分派的物理地址都是持续的。内核地址空间的线性地址0xC0000001所对应的物理地址为0x00000001,它们之间相差一个偏移量PAGE_OFFSET = 0xC0000000

该地区的线性地址和物理地址存在线性转换关系「线性地址 = PAGE_OFFSET + 物理地址」也可以用 virt_to_phys()函数将内核虚拟空间中的线性地址转化为物理地址。

高端内存线性地址空间

内核空间线性地址从 896M 到 1G 的区间,容量 128MB 的地址区间是高端内存线性地址空间,为什么叫高端内存线性地址空间?下面给你诠释一下:

前面已经说过,内核空间的总巨细 1GB,从内核空间肇端地址起头的 896MB 的线性地址可以间接映照到物理地址巨细为 896MB 的地址区间。

退一万步,即使内核空间的1GB线性地址都映照到物理地址,那也最多只能寻址 1GB 巨细的物理内存地址范围。


叨教你现在你家的内存条多大?快醒醒都 0202 年了,一般 PC 的内存都大于 1GB 了吧!

口试不懂 Linux 内存治理?我用 20 张图给你批注白-8.jpg

所以,内核空间拿出了最初的 128M 地址区间,分别红下面三个高端内存映照区,以到达对全部物理地址范围的寻址。而在 64 位的系统上就不存在这样的题目了,由于可用的线性地址空间远大于可安装的内存。

静态内存映照区

vmalloc Region 该地区由内核函数vmalloc来分派,特点是:线性空间持续,可是对应的物理地址空间纷歧定持续。vmalloc 分派的线性地址所对应的物理页能够处于低端内存,也能够处于高端内存。

永久内存映照区

Persistent Kernel Mapping Region 该地区可拜候高端内存。拜候方式是利用 alloc_page (_GFP_HIGHMEM) 分派高端内存页大概利用kmap函数将分派到的高端内存映照到该地区。

牢固映照区

Fixing kernel Mapping Region 该地区和 4G 的顶端只要 4k 的隔离带,其每个地址项都办事于特定的用处,如 ACPI_BASE 等。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-9.jpg

内核空间物理内存映照
回首一下

上面讲的有点多,先别焦急进入下一节,在这之前我们再往返顾一下上面所讲的内容。假如认真看完上面的章节,我这里再画了一张图,现在你的脑海中应当有这样一个内存治理的全局图。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-10.jpg

内核空间用户空间全图
内存数据结构

要让内核治理系统中的虚拟内存,必定要从中笼统出内存治理数据结构,内存治理操纵如「分派、开释等」都基于这些数据结构操纵,这里罗列两个治理虚拟内存地区的数据结构。

用户空间内存数据结构

在前面「进程与内存」章节我们提到,Linux进程可以分别为 5 个分歧的内存地区,别离是:代码段、数据段、BSS、堆、栈,内核治理这些地区的方式是,将这些内存地区笼统成vm_area_struct的内存治理工具。

vm_area_struct是描写进程地址空间的根基治理单元,一个进程常常需要多个vm_area_struct来描写它的用户空间虚拟地址,需要利用「链表」和「红黑树」来构造各个vm_area_struct

链表用于需要遍历全数节点的时辰用,而红黑树适用于在地址空间中定位特定内存地区。内核为了内存地区上的各类分歧操纵都能获得高性能,所以同时利用了这两种数据结构。

用户空间进程的地址治理模子:


口试不懂 Linux 内存治理?我用 20 张图给你批注白-11.jpg

wm_arem_struct
内核空间静态分派内存数据结构

在内核空间章节我们提到过「静态内存映照区」,该地区由内核函数vmalloc来分派,特点是:线性空间持续,可是对应的物理地址空间纷歧定持续。vmalloc 分派的线性地址所对应的物理页能够处于低端内存,也能够处于高端内存。

vmalloc 分派的地址则限于vmalloc_startvmalloc_end之间。每一块vmalloc分派的内核虚拟内存都对应一个vm_struct结构体,分歧的内核空间虚拟地址之间有4k巨细的防越界余暇区间隔区。

与用户空间的虚拟地址特征一样,这些虚拟地址与物理内存没有简单的映照关系,必须经过内核页表才可转换为物理地址或物理页,它们有能够尚未被映照,当发生缺页时才真正分派物理页面。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-12.jpg

静态内存映照

前面分析了 Linux 内存治理机制,下面深入进修物理内存治理和虚拟内存分派。

经过前面的进修我们晓得,法式可没这么好骗,任你内存治理把虚拟地址空间玩出花来,到最初还是要给法式实实在在的物理内存,否则法式就要罢工了。

所以物理内存这么重要的资本一定要好好治理起来利用(物理内存,就是你实实在在的内存条),那末内核是若何治理物理内存的呢?

物理内存治理

Linux系统中经过度段和分页机制,把物理内存分别 4K 巨细的内存页 Page(也称作页框Page Frame),物理内存的分派和接管都是基于内存页停止,把物理内存分页治理的益处大大的。

假如系统请求小块内存,可以预先分派一页给它,避免了频频的申请和开释小块内存带来频仍的系统开销。

假如系统需要大块内存,则可以用多页内存拼集,而不需要求大块持续内存。你看不管内存巨细都能收放自若,分页机制何等完善的处理计划!


口试不懂 Linux 内存治理?我用 20 张图给你批注白-13.jpg

But,理想很饱满,现实很骨感。假如就间接这样把内存分页利用,不再加额外的治理还是存在一些题目,下面我们来看下,系统在屡次分派和开释物理页的时辰会碰到哪些题目。

物理页治理面临题目

物理内存页分派会出现内部碎片和内部碎片题目,所谓的「内部」和「内部」是针对「页框内外」而言,一个页框内的内存碎片是内部碎片,多个页框间的碎片是内部碎片。

内部碎片

当需要分派大块内存的时辰,要用好几页组合起来才够,而系统分派物理内存页的时辰会只管分派持续的内存页面,频仍的分派与接管物理页致使大量的小块内存夹杂在已分派页面中心,构成内部碎片,举个例子:


口试不懂 Linux 内存治理?我用 20 张图给你批注白-14.jpg

内部碎片
内部碎片

物理内存是按页来分派的,这样当现实只需要很小内存的时辰,也会分派最少是 4K 巨细的页面,而内核中有很多需要以字节为单元分派内存的场景,这样原本只想要几个字节而已却不能不分派一页内存,撤除用掉的字节剩下的就构成了内部碎片。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-15.jpg

内部碎片
页面治理算法

方式总比困难多,由于存在上面的这些题目,聪明的法式员心血来潮,引入了页面治理算法来处理上述的碎片题目。

Buddy(伙伴)分派算法

Linux 内核引入了伙伴系统算法(Buddy system),什么意义呢?就是把不异巨细的页框块用链表串起来,页框块就像手拉手的好伙伴,也是这个算法名字的由来。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-16.jpg

具体的,一切的余暇页框分组为11个块链表,每个块链表别离包括巨细为1,2,4,8,16,32,64,128,256,512和1024个持续页框的页框块。最大可以申请1024个持续页框,对应4MB巨细的持续内存。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-17.jpg

伙伴系统
由于任何正整数都可以由 2^n 的和组成,所以总能找到合适巨细的内存块分派进来,削减了内部碎片发生 。

分派实例

比如:我需要申请4个页框,可是长度为4个持续页框块链表没不足暇的页框块,伙伴系统会从持续8个页框块的链表获得一个,并将其拆分为两个持续4个页框块,取其中一个,别的一个放入持续4个页框块的余暇链表中。开释的时辰会检查,开释的这几个页框前后的页框能否余暇,能否组成下一级长度的块。

号令检察

[lemon]]# cat /proc/buddyinfo Node 0, zone      DMA      1      0      0      0      2      1      1      0      1      1      3 Node 0, zone    DMA32   3198   4108   4940   4773   4030   2184    891    180     67     32    330 Node 0, zone   Normal  42438  37404  16035   4386    610    121     22      3      0      0      1slab分派器

看到这里你能够会想,有了伙伴系统这下总可以治理好物理内存了吧?不,还不够,否则就没有slab分派器什么事了。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-18.jpg

那什么是slab分派器呢?

一般来说,内核工具的生命周期是这样的:分派内存-初始化-开释内存,内核中有大量的小工具,比如文件描写结构工具、使命描写结构工具,假如依照伙伴系统按页分派和开释内存,对小工具频仍的履行「分派内存-初始化-开释内存」会很是消耗性能。

伙伴系统分派进来的内存还是以页框为单元,而对于内核的很多场景都是分派小片内存,远用不到一页内存巨细的空间。slab分派器,「经过将内存按利用工具分歧再分别红份歧巨细的空间」,利用于内核工具的缓存。

伙伴系统和slab不是二选一的关系,slab 内存分派器是对伙伴分派算法的补充。

大口语说道理

对于每个内核中的不异范例的工具,如:task_struct、file_struct 等需要反复利用的小型内核数据工具,城市有个 slab 缓存池,缓存住大量常用的「已经初始化」的工具,每当要申请这类范例的工具时,就从缓存池的slab 列表平分派一个进来;而当要开释时,将其重新保存在该列表中,而不是间接返回给伙伴系统,从而避免内部碎片,同时也大猛进步了内存分派性能。

首要优点

    slab 内存治理基于内核小工具,不用每次都分派一页内存,充实操纵内存空间,避免内部碎片。slab 对内核中频仍建立和开释的小工具做缓存,反复操纵一些不异的工具,削减内存分派次数。
数据结构


口试不懂 Linux 内存治理?我用 20 张图给你批注白-19.jpg

slab分派器
kmem_cache 是一个cache_chain 的链表组成节点,代表的是一个内核中的不异范例的「工具高速缓存」,每个kmem_cache 凡是是一段持续的内存块,包括了三品种型的 slabs 链表:

    slabs_full (完全分派的 slab 链表)slabs_partial (部分分派的slab 链表)slabs_empty ( 没有被分派工具的slab 链表)
kmem_cache 中有个重要的结构体 kmem_list3 包括了以上三个数据结构的声明。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-20.jpg

kmem_list3 内核源码
slabslab 分派器的最小单元,在实现上一个 slab 由一个或多个持续的物理页组成(凡是只要一页)。单个slab可以在 slab 链表之间移动,例如假如一个「半满slabs_partial链表」被分派了工具后变满了,就要从 slabs_partial 中删除,同时插入到「全满slabs_full链表」中去。内核slab工具的分派进程是这样的:

    假如slabs_partial链表还有未分派的空间,分派工具,若分派以后变满,移动 slabslabs_full 链表假如slabs_partial链表没有未分派的空间,进入下一步假如slabs_empty 链表还有未分派的空间,分派工具,同时移动slab进入slabs_partial链表假如slabs_empty为空,请求伙伴系统分页,建立一个新的余暇slab, 按步调 3 分派工具

口试不懂 Linux 内存治理?我用 20 张图给你批注白-21.jpg

slab分派图解
号令检察

上面说的都是理论,比力笼统,动脱手来康康系统中的 slab 吧!你可以经过 cat /proc/slabinfo 号令,现实检察系统中slab 信息。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-22.jpg

slabinfo查询
slabtop 实时显现内核 slab 内存缓存信息。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-23.jpg

slabtop查询
slab高速缓存的分类

slab高速缓存分为两大类,「通用高速缓存」和「公用高速缓存」。

通用高速缓存

slab分派器中用 kmem_cache 来描写高速缓存的结构,它自己也需要 slab 分派器对其停止高速缓存。cache_cache 保存着对「高速缓存描写符的高速缓存」,是一种通用高速缓存,保存在cache_chain 链表中的第一个元素。

别的,slab 分派器所供给的小块持续内存的分派,也是通用高速缓存实现的。通用高速缓存所供给的工具具有多少散布的巨细,范围为32到131072字节。内核中供给了 kmalloc()kfree() 两个接口别离停止内存的申请和开释。

公用高速缓存

内核为公用高速缓存的申请和开释供给了一套完整的接口,按照所传入的参数为指定的工具分派slab缓存。

公用高速缓存的申请和开释

kmem_cache_create() 用于对一个指定的工具建立高速缓存。它从 cache_cache 普通高速缓存中为新的专有缓存分派一个高速缓存描写符,并把这个描写符插入到高速缓存描写符构成的 cache_chain 链表中。kmem_cache_destory() 用于裁撤和从 cache_chain 链表上删除高速缓存。

slab的申请和开释

slab 数据结构在内核中的界说,以下:


口试不懂 Linux 内存治理?我用 20 张图给你批注白-24.jpg

slab结构体内核代码
kmem_cache_alloc() 在其参数所指定的高速缓存平分派一个slab,对应的 kmem_cache_free() 在其参数所指定的高速缓存中开释一个slab。

虚拟内存分派

前面会商的都是对物理内存的治理,Linux 经过虚拟内存治理,欺骗了用户法式伪装每个法式都有 4G 的虚拟内存寻址空间(假如这里不懂我说啥,倡议回头看下 别再说你不懂Linux内存治理了,10张图给你放置的明大白白!)。

所以我们来研讨下虚拟内存的分派,这里包括用户空间虚拟内存和内核空间虚拟内存。

留意,分派的虚拟内存还没有映照到物理内存,只要当拜候申请的虚拟内存时,才会发生缺页异常,再经过上面先容的伙伴系统和 slab 分派器申请物理内存。

用户空间内存分派

malloc

malloc 用于申请用户空间的虚拟内存,当申请小于 128KB 小内存的时,malloc利用 sbrk或brk 分派内存;当申请大于 128KB 的内存时,利用 mmap 函数申请内存;

存在题目

由于 brk/sbrk/mmap 属于系统挪用,假如每次申请内存都要发生系统挪用开销,cpu 在用户态和内核态之间频仍切换,很是影响性能。

而且,堆是从低地址往高地址增加,假如低地址的内存没有被开释,高地址的内存就不能被接管,轻易发生内存碎片。

处理

是以,malloc采用的是内存池的实现方式,先申请一大块内存,然后将内存分红份歧巨细的内存块,然后用户申请内存时,间接从内存池当挑选一块附近的内存块分派进来。

口试不懂 Linux 内存治理?我用 20 张图给你批注白-25.jpg

内核空间内存分派

在讲内核空间内存分派之前,先往返顾一下内核地址空间。kmallocvmalloc 别离用于分派分歧映照区的虚拟内存,看这张上次画的图:


口试不懂 Linux 内存治理?我用 20 张图给你批注白-26.jpg

内核空间细分地区
kmalloc

kmalloc() 分派的虚拟地址范围在内核空间的「间接内存映照区」。

按字节为单元虚拟内存,一般用于分派小块内存,开释内存对应于 kfree ,可以分派持续的物理内存。函数原型在 <linux/kmalloc.h> 中声明,一般情况下在驱动法式中都是挪用 kmalloc() 来给数据结构分派内存 。

还记得前面说的 slab 吗?kmalloc 是基于slab 分派器的 ,一样可以用cat /proc/slabinfo 号令,检察 kmalloc 相关 slab 工具信息,下面的 kmalloc-8、kmalloc-16 等等就是基于slab分派的 kmalloc 高速缓存。


口试不懂 Linux 内存治理?我用 20 张图给你批注白-27.jpg

slabinfo-kmalloc
vmalloc

vmalloc 分派的虚拟地址区间,位于 vmalloc_startvmalloc_end 之间的「静态内存映照区」。

一般用分派大块内存,开释内存对应于 vfree,分派的虚拟内存地址持续,物理地址上纷歧定持续。函数原型在 <linux/vmalloc.h> 中声明。一般用在为活动的交换区分派数据结构,为某些 I/O 驱动法式分派缓冲区,或为内核模块分派空间。


下面的图总结了上述两种内核空间虚拟内存分派方式。

口试不懂 Linux 内存治理?我用 20 张图给你批注白-28.jpg


总结一下


Linux内存治理是一个很是复杂的系统,本文所述只是冰山一角,从宏观角度给你展现内存治理的全貌,但一般来说,这些常识在你和口试官聊天的时辰还是够用的,固然也希望大师可以经过念书领会更深条理的道理。

本文可以作为一个索引一样的进修指南,当你想深入某一点进修的时辰可以在这些章节里找到切入点,以及这个常识点在内存治理宏观上的位置。

别的给大师保举一个 Linux进修专栏,感爱好可以领会。


我是柠檬,关注我涨常识,我们下期再会!

Hi,我是堂主柠檬,一线互联网大厂后端法式员一枚,首要分享后端开辟相关的技术进修,每篇文章都是我经心创作,假如文章对你有帮助,此次一定不要白piao,点赞分享 给需要的朋友


分享编程进修,助力法式员长大,下面是往期分享的的内容(点击可检察):

13个法式员不成不知的VSCode插件,工作效力提升10倍
13万点赞的法式员进修线路!都在这3 张高清思维导图里
Java、C++ 软件开辟完整进修线路,已拿阿里offer
这个大学在Github开源了计较机课程,看完在家上个 985


私信答复「1024」可检察和获得以上一切保举的项目和资本。

微信搜索公众号「 后端技术书院 」答复「1024」获得50本计较机电子书,答复「进修线路」获得超具体后端技术进修线路思维导图,文章每周延续更新,我们下期见!

口试不懂 Linux 内存治理?我用 20 张图给你批注白-29.jpg

点击下方「领会更多」下载进修资本
温馨提示:
好向圈www.kuaixunai.com是各行业经验分享交流社区,你可以在这里发布交流经验,也可以发布需求与服务,经验圈子里面禁止带推广链接、联系方式、违法词等,违规将封禁账号,相关产品信息将永久不予以通过,同时有需要可以发布在自己的免费建站官网里面或者广告圈, 下载好向圈APP可以加入各行业交流群 本文不代表好向圈的观点和立场,如有侵权请下载好向圈APP联系在线客服进行核实处理。
审核说明:好向圈社区鼓励原创内容发布,如果有从别的地方拷贝复制将不予以通过,原创优质内容搜索引擎会100%收录,运营人员将严格按照上述情况进行审核,望告知!
回复

使用道具 举报

已有(11)人评论

跳转到指定楼层
ejoe 发表于 2021-1-2 17:25:55
@程序员柠檬橙 昨天面试了一位隔壁大厂跳槽来的小伙子,内存管理这几个问题没答上来,你来试试?#我要上微头条# #程序员#
回复

使用道具 举报

九连生态农场81 发表于 2021-1-3 17:42:22
栈是先进后出吧
回复

使用道具 举报

maxincen 发表于 2021-1-4 19:58:48
这个说的是32位系统的吧?如果实际物理可分配内存不够虚拟内存地址空间分配时,怎么处理的?windows好像是将非活动内存交换到硬盘,腾出空间供分配使用。
64位的也普及下?
回复

使用道具 举报

王者山王 发表于 2021-1-5 09:34:45
malloc是内存池实现?意思不产生内存碎片?
回复

使用道具 举报

1019haitang 发表于 2021-1-5 17:12:32
收藏了
回复

使用道具 举报

高考物理110 发表于 2021-1-6 16:50:19
回复

使用道具 举报

荒野里的孩子 发表于 2021-1-7 02:49:27
转发了
回复

使用道具 举报

孤狼 发表于 2021-1-7 13:20:00
转发了
回复

使用道具 举报

腾腾 发表于 2021-1-8 10:04:34
转发了
回复

使用道具 举报

text028 发表于 2021-1-9 03:33:04
转发了
回复

使用道具 举报

我有他5210 发表于 2021-1-9 13:41:34
转发了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

24小时热文