00:00
而且这是你在这个写代码练习过程多了,呃,不是就是练习多了之后才能怎么的,才能具体去研究出这个到底它的作用范围和生命周期啊,下面讲的是什么,下面讲的今天重点了啊是内存布局。那我们程序经过起步是变成一个就是C源代码经过四步变成一个可执行程序,是不是预处理编译汇编链接杠大E杠大S,然后杠后面什么也不杠,谁还能想起这东西吗?他能想起来啊,真没有错呀哈,嗯,那这个程序怎么着,就是在编译完之后,它就自动把这个程序已经分割好了,变成一个可执行程序,那这里面我们可以看一下,或者通过一个这个命令叫size后面加上的可可执行程序,那我下这里面D盘里面有没有可执行程序了。有吧a.ESE是不是,那我们打开这个CMD给大家看一下啊。打开CMD,然后是这应该是size还是size,我看一下是size size。
01:02
Size,然后后面加上什么,加上这个是你的这个应用程序,这里面就显示这是不是可执行程序啊,显示你可执行程序的信息啊,看一下这是它的这个是代码信息是test是10844啊date date是什么?Date代表的是数据,数据是1062,然后是BSS是我们看一下这对应这里面看一下是未初始化数据的信息,就是你只是定义一个变量,没有给初始化的一个信息是这个是BSS,还有DEC和什么呀,和这个是。Hedc和h his就是代表它俩的一个十进制大小和一个是16进制大小,这是费用name就显示它的这个是文件信息,那看一下程序在创建过程中,他就把这些具体东西给你分好了,比如说这个代码有多少多少个,然后它的数据有多少多少个,然后他的未未初始化的数据信息有多少多个,它都给你标明这个信息了,是不是啊,那程序在运行过程中,它在执行起来的过程中,它也会把不同区域的代码放在不同的内存管理中,然后让这个什么,让这个程序进行执行。
02:13
那我们这里面看一下这个这个它的就是在没执行前会分配到代码区,数据区和未出化数据三个部分啊,啊当然这个我们这个也把这个呃对的区和这个BSS区合成为叫静态区或全局区,那这里面可以大家画图,什么样图呢?是这样的,这假如说是我们一个内存啊,内存这里面分为很多这个区域。很多区域第一个就是什么,第一个就是这个是。代码代码区,代码区存放是什么?存放是不是计算机的这个指令啊啊,就是咱们这个编译好这个程序中的指令,或者是一些这个函数啊,是不是都在这个代码区放着呢啊,函数也是编,编译好是不是也代码指令想调的时候调用啊啊注意一下啊,这个会有区别,就是函数和函数的这个变量,函数里面变量是有两个不同的概念,第一个是叫程序指令啊。
03:20
都放在这个代码区,这是第一话,还有第二块,我们把这什么把这个是呃D的区和呃BSS区统称为什么呀,统称为叫呃数据区,或者叫全局区,叫静态区,那我们把这个也叫数据区啊,数据区这个也包括是什么叫静态区或者叫。全局区啊,这个区域啊,这里面放什么东西啊是是。看一下啊,是初始化的数据和未数化的数据,初始化的数据,还有是未初始化的数据啊,当然咱们前面就咱们前面还学过几个内容啊,未初始化的数据。
04:06
咱们前面学过,比如说我定义的这个什么呀。一个字符串啊,双引号一起来,比如说这样写啊差。发星P等于一个W,这是什么?字段常量是吧?字段常量当然说了都存在什么,这个常量区或数据区就存在这个位置存在我们程序中数据区叫自。符串常量。常量。这里面对未初始化数据区和呃,不是初始化数据区,他也做了一个细分,分为哪个呢?分为第一步分为叫是初始化的。全局。变量全积变量知道啥意思吧,是不是还有第二个是初始化的静态。
05:07
静态全局变量啊,现在是分这俩是不是,那我们还有一个什么,还有一个就是这个是static,另外一种static就局部变量,Static是初始化的静态局部变量,这是初始化的数据,是不是存在这里面了啊,那这里面还有什么?还有就是未初始化的数据,未初始化数据就是代表啥意思啊,代表是。我只把这个数据怎么着是。呃,是创建完之后没给他这个具体的值是不是啊,那这里面咱们需要看一下,比如说没给他值,那应该是什么情况。右击添加一个新建项。是零九为。初始化数据未初始化变量的值。
06:01
变量值就行啊,点C。零一。哎,一啊,这里面写一下啊。比如说未初始化局部变量,未初始化局部变量可以吗?我们假如说有个未初始化的局部变量可以吗?加TF。100D斜杠N,逗号一个A。这样情况可以吗?你比如说运行的时候,调试开始执行发生错误了,是不是说是未初始化绝变量A,那如果这样就这样写了一句话,那程序会发生会报错吗?确定吗?调试开始执行。说不会啊,啊,当我们使用这个数据的时候,是不是发生会发生这个报错啊,当然你不使,当然这个是怎么是这个VS给你自动提示的,说这是一个什么呀,是不是这个是一个未数入化数据,如果说你在这个Linux里面这这句话写能不能可以,能不能写出来啊,能是不是打印只是打印出来一堆,这个是乱码而已,是不是啊啊能执行啊,这是可以执行的,你可以自己去演示一下啊,那种局部变量未初始化情况下是打印的是什么呀?是乱码信息吧,是不是啊啊,那假如我这里面再写个什么,写一个是在这里面再写一个是sta t,然后是int类型啊,是D。
07:32
然后去打印一下这个B的值。Static对应的这个B值,然后把这个A给AA不注销掉,是不是也不错啊,调试开始执行打的值位起啊,零就是static修饰的什么,这叫绝变量嘛,是不是啊,我未给它初始化,是不是没给它初始化,它的结果值为多少啊?结果值为是不是一啊啊这里面是第一个是我们要写的是。未初始化的静态。
08:03
局部变量,这好像写不下啊,是不是,但是它有一个默认初始值为多少啊,默认初始值为。零啊,这行写不下了,我字小一点啊。十能看清吗?啊好,那咱们继续啊,那这里面这个B能做运算操作吗?比如说B加加,B乘以个数等于个数什么可不可以啊,我们看一下是呃,B加加,然后是B乘等于B可不可以我看一下。调试开始执行。是不是可以啊,B等于零后,然后B加加之后是几了一,然后是一乘以一等于几啊一然后打进这结果是不是唯一啊,这什么?这是我们这个是未数始化的局变量,它俩在什么?他俩在我们内存中存着区域,可真真是不一样的一个位置啊,但是我们把这一块区域,这一大块区域统称为数据区域,明白吧啊,他们在内存中存的位置可不一样,那除了这之外,还有其他的这几种方式,我看一下,比如说把这先注销掉啊。
09:13
A和B,然后先注销掉。Int类型的A。这是个什么呀?全你们初始化了吗?没有调试开始执行,诶这这里面骚扰,这里面是打印错了吧,应该打一个A,调试开始执行。诶,Sorry啊,因为这个A的情况下有其他地方是不是啊啊,那我再换一个啊,Int类型的C啊,C应该没有了吧,那打一个C啊。调试开始执行。答案的结果,结果为多少啊,零啊,这是我们要写第了,是二未初始化的全局变量啊,默认初始值为零,它能不能进行加减操作啊,我们看一下啊是。
10:09
C加加,然后是。C乘以C啊,C乘等于C加加,这样可不可以啊,是不是可以啊啊调试开始执行结果是不是还是一啊,诶二了,C加加啊是这这这里面应该是结果为一,这个结果为一,然后这还有一个加加呢,是不是啊加加结果为几了,为二了吧?嗯。好,这是它的什么,是全局?呃,全局变量嘛,是不是啊,还有一个什么,还有一个是sta类型的D,这是被初始化了吧,啊打一下这个D的值啊D,然后把这两这两句代码注销掉。
11:00
调试开始,执行结果是几啊零啊。这里面什么,这里面是我们的第三种是。未初始化的。静态全局变量啊,默认数值还是几,还是这个是量啊,然后包括还有一个什么,还有一个是叫字符串常量是吧?是那这都在我们数据区存着了,就是我们刚才通过这个什么,通过这CMD演示出来这个数据区域,这个存放的内容是不是就这些内容啊,这是代码区和指令区,那还有另外两区,什么区呢?这里面大家说一下,咱们这里面这个程序中也有,还有一个是堆区和站区啊,这里面注意一下这个问题啊,就是我们就是在在我们这个脑海中啊,是将一个程序把这个什么,把这个全局数据区,然后未出始化数据区,然后还有是四常量区,它统称为什么区啊,统称为这个是数据区,知道吧啊,当你们在在上升到就业班的时候,学到什么?学到这个是。
12:08
啊,Linu。系统编程的时候,林宁公司系统编程。系统编程啊,就会将这一部分区域啊,会将数据区啊拆开来讲解。就这部分吧,咱们先理解为内存四区,是不是咱们现在画俩是吧,还有俩,那这样到到什么到这个就业班奖励用系统编程的时候,就把这里面的一些单独都给你拿出来去分析了,知道吧,还有另外俩区域,什么区,比如说我定一个变量in的类型呢,A等于A。等于十啊,是不是存在什么区啊,还有第一个int类型的AR,然后是十等于啊,是零,那这些我在函数内部定义的一些变量数组,包括我们定义的这个指针,还有后面讲的什么结构体枚举,它们都存在另外一个区,另外一区什么区呢?是根据你程序运行过程中去创建的一块区域,我们称为什么区啊。
13:12
战区是不是?站区,这个站区你看一下站,这是哪个站的,客站的站是不是啊,那你就应该能明白啥意思,是不是是程序创建过程中,然后去创建了战区,程序执行过程,程序执行完成之后,战区怎么的消失了,是不是没有了这个战区那是不是相当于客栈一样,其实你可以把这个战区理解为啥理解为这是呃,有产权的住房。就是。有产权的住房,这什么意思,比如说你家的房子啊,虽然说从国家买了,然后,但是你只有多少年住产权期限呢?70年住完之后,你这个房子怎么就不属于你了,属于国家了是不是?那比如说你要活到100岁,另外30年你就睡大街了啊这个意思啊,啊当然国家不会让你去市大街的啊,咱们咱咱上课不聊这些东西啊,啊对,这是政治啊,那还有什么,还有这个代码区域,你可以把它理解为什么呢?你看你只在程序指令是不是啊,其实帮你处理很多事了吧,是不是,我用的时候就去找一下程序指令啊,帮我处理一些事是不是,他是不是可以相当于什么,相当于这个叫政府部门啊,啊,政府部门做对叫叫有关部门,是不是他就帮你做一些事儿,是不是,比如说你要上访,要举报,是不是都有接收是不是啊,当然你不止这些,比如说你要去办个身份证啊,报案呢,是不是,是不是都会找到这个政府部门,政府部门就让你做什么操作,是调程序指令嘛,是不是?
14:42
啊,做一些这个合法化操作是不是都可以啊,啊那这个数据区,那我们可以理解为啥呀。啊,规章制度,其实你可以这样理解,理解为这个是叫公共设施。公共设施啊。
15:00
公共设施,比如说像什么,像这个公园,那这个是不是对你开放的啊,是不是你可以访问的啊,比如说这个是图书馆,是不是你你可以访问的,这里面是不是相当于这个这里面的一个数据是不是可以去获得啊啊当然这个公园里面还有一个叫字符串常量区的是不是也存在啊啊那比如说这个数据你能修改这里面数据吗?是不能啊,那你能修改这这一块数据内容吗?是不是可以啊啊,是不是就相当于什么,相当于这个是呃公园,比如说今天晚上没地睡了,我睡公园里是不是可以啊,是不是地算改变这里面数据啊,但是有些地儿不让你睡是不是啊,比如说比如这个这个厕所是不是啊,他不让你睡啊,这个到晚上就把门锁上了,这数据呃自不到朝城区是不允许你改啊啊这数据区里面数据有一部分是允许你更改的,一部分是不允许你更改的,知道吧。当然咱们这里面还没补全,等一会儿还有点内容还需要补到这里面来,比如说什么,比如说那个是你定义的这个常量啊,什么什么还没补进来呢,知道吧,啊,咱们一会再说啊,这是公共设施,那就是就是占区相当于这个产权住房,还有一个什么,还有一个对应的,还有一个是。
16:10
堆取啊堆嘘什么啊,就是这个是,呃,你自己的这个家里怎么的住不下了是不是啊,你这个要怎么样,要上这个是开QQ空间去住去,比如说你自己家里这个原本能住五个人是不是,结果你家来了十个亲戚是不是啊,住不下了,那你需要怎么样上宾馆给他这个开间房是不是,或者是怎么不是,比如说你要开个party是不是,家里这个装不下是不是,你可上哪去开啊,上那个是。酒店开是不是啊,像酒店开发地。这个相当于什么?相当于这个是叫公共住房,呃公共叫公共啥呢?公共公共什么公公租房啊,这个不跟这还不一样啊,就是公共叫直接叫宾馆得吧,是不是你也知道啥意思啊啊是不是宾馆啊,酒店吧,酒店更高级点是不是酒店啊,五星级酒店,对,因为这个区域很大,咱们叫五星级酒店也行啊,五星级酒酒店它最高七星级呢,是不是在迪拜是不是啊啊那这个堆区,那咱们先把堆区这个东西思考一下啊,那比如说我要上酒店开房去,那我这里面需要经过几步啊。
17:22
给钱,那你不不一定给钱,是不是,我得需要一个证明,是不是啊证明啊,我要开房,这不能这么说,是不是很理直气壮的说,嗯,是呃,提交开房申请是不是,比如说诶跟前台说,诶你好,我要开房是不是这是开房申请啊是。开房,开房申请。开房申请啊,第一步申请完之后你得交啥啊,交押金是不是身份证和押金是不是啊押金。啊,然后你开完房之后,他会给你个啥呀,房卡或者钥匙是不是啊钥匙咱们就用钥匙就行,是不是,然后是钥匙,那然后你在这里面就是做这个操作是吧?嗯,开party嘛,开party做完操作呢,做完操作是不是得走了,你直接走了,你退不退房了,要不要押金了,是不是太高兴了,是不是得退押金了,是不是退钥匙是不是啊交钥匙交钥匙。
18:31
然后怎么样押金啊,然后退押金啊,退押金啊,检查房间啊,检查房间,你在这步之后,你自己就检查了啊,啊这里面是不是整个的一个这个结束了这个流程,其实这个咱们这个流程之后,咱们可以给他放到后面一会儿咱们讲一个开辟对空间,包括对空间释放,就是这个套路,知道吧,啊就是这个套路,那这个战区咱们再看一下啊,这是堆区的一个过程,然后是战区呢,战区做哪些操作,比如说这个里面存哪些东西,比如说这个是。
19:02
是这个。啊,这是一不用写一啊变量,然后还有啥呢?还有是数组是不是在这里存量,那包括我们这个常量和不在这里存量,常量在这里面存,只是我没写而已啊,只是这个跟你区分一下啊变量数组还有是啊结构体啊指针。指针,然后还有是。啊枚举啊等等啊,这里面存的都是什么,都是系统临时用到的时候就拿过来啊,包括还有什么,还有是函数。呃,行参行参啊,都会在什么呀,都会在这个战区中创建啊,当然这个这个需要注意一个问题,什么问题,就是只有我们C语言将数组放在战区操作,能明白这句话意思吗?啊在其他的这个都放在哪,都在堆虚,为啥呢?这数组但凡大一点,这是怎么的?我们战区放不下了,是不是战区这里面这个房间都说了,是不是比较小的啊,咱们一会儿会给你说一下这个战区大小啊,那比如说先给大家演示一个问题,什么问题啊。
20:10
这样写啊,先写个代码啊,把这个呃,不会影响程序啊,那再写一个in的类型的AR,然后让它等于一个E。行,啥时候就要就要怎么测测算,这怎么直接报错了呢,数字太大是不是再小一点呢?哎,应该不过错呀,多少个啊,你最好不要超过整形的取值范围是不是啊,你先不超整形范围,现在多少个11个大小是不是啊,我创建11大小数数数组,我看一下行不行啊,我只是创建了啊,是不是还没有负数值呢,调试开始执行。啊,数字太大了,也超范围,10亿不行,再看一下一个亿调是开始执行,10亿挂掉了吧,那为啥挂掉了呢?是这个怎么数组占了,我们整个对空间都占满了,知道吧,还不够呢,结果占满了是不是啊,比如说你家来个亲戚,这一个亲戚假如说500G是不是你家占满了,是不是你就进不了其他人了,是不是他可能怎么的就进去一半,是不是还有一半在门外呢?是不是啊,就这意思啊啊比如说负数值等于零啊,这样也报错啊,开始执行看一下。
21:19
看有报错是不是,那所以说你在创建大的这个数据的时候,你应该放在哪啊,堆取啊,这个一定要注意的问题啊,写一下这个注意的问题,嗯。嗯创呃是如果在程序中创建,创建什么创建大。的数据啊,这不是文件啊,大的数据啊,应该放在堆区啊,放在堆区空间啊。应该放在放在堆区,那那这里面我们就说一下,你看这里面放多少个数据放的是。
22:06
哎呀,这也查不过来呀。呃呃万,然后是一个亿的数据,是不是那一个亿我们印的类型占多大大小啊是四是不是就就算占内存空间大小多大是四个。呃,缺一个零吧。是不是四个E大小啊,呃,四个E大小。那四个一大小的情况下,那我们再转成这个兆的情况下,看一下转成多少兆啊4E再除以一个1024是什么?现在是B吧,是不是啊四诶不打它啊,是拿计算器标准计算器,然后选择这个是四。呃呃,多少再来个零,再来个零啊,再除以10224等于,再出一个,这是KB吧,是不是A1024等于啊,这就是381兆了是不是啊,381兆,那我们这里面这个是占空间,它直上放不了381兆是不是,那我们再去掉的零,那这里面就应该是38兆了,是不是大概就约等于38兆是不是啊,因为那是1024除以的,那我看一下这里面行不行。
23:18
还是不行,38兆是不是也不行啊,嗯,再去掉一零,现在多少个啊,38兆看行不行啊,调试开始执行。哎,还不行啊,再改一个0.38兆,约等于0.38兆啊,调试开始执行。诶,是不是没问题啊啊,0.38兆至少怎么的,至少没超出我们这个空间大小吧,啊,但是3.8兆是不是就超出了啊,所以说这里面占区大小就应该知道多大了吧,是大于0.38小于3.8是不是,那这是个不准确的啊,那这里面跟大家说一下战区的大小啊,战区大小啊是根据不同的操作系统,而且不同的这个什么呀,比如64位操作系统,32操作系统,这里面堆区的空间大小真的不同啊,跟大家说一下是。
24:08
在不同的操作系统中啊,是这呃是系统,这里面是系统分配给的战区啊,分配给每一个程序的。呃,在不同操作系统中,系统分配给每个程序的站。占区空间大小不同啊。一般Windows。Windows。是一照到。八兆这是M啊,注意一下我这是M啊不等,因为这里面还分什么,分这个64什么什么这个这个32位操纵是不是啊一般。
25:04
Linux是一兆到16兆。不等,一般情况下没人考你这个占中距体大小,如果考的情况你就说一兆,呃一兆就可以啊,不要说太多知道吧,就是什么呀,就是。1024。1024星1024BYTE注意一下,我这是大B,知道吧?啊,一般你说一兆左右就可以了,知道吧,你想想这里面能存一一兆左右的这个数据,那多不多呀啊那如果说你这个程序中用的情况下完全够用是不是,但是比如说你这个是一个游戏,是不是加载图片啊,游这个场景啊,什么声音啊,那些东西拿回来是不是怎么样,指证不够是不是啊,那稳稳不够,一张图片可能一个多兆,一个一个兆,一个兆左右是不是,所以说很多东西都放在这个对中存储,比如说什么,比如说这个是啊是音频文件。
26:07
那我要播放音频文件,是不是得把它读到内存中啊,啊,那不能怎么的,不能放到我程序中是不是啊,而是放在什么,放在这个堆音频文件还有什么视频文件还有什么,还有是图像文件,图像文件还有什么其他文件吗?文本文件,文本文件也得需要操作啊,文本文件啊。这里面操作操作的时候才会才会把它唤醒起来,知道吧,这是他这个他放的东西啊,比如说这个大东西放哪放飞区是不是包括还有一些什么大的这个数据是不是就刚才说的数组是不是啊大的。数组啊,数组数据吧,啊,当然当然是当然大家知道的啊啊数组数据当然这里面比如说结构体,它也属于什么,也属于这个数据类的一种啊啊当然不能不能写数组啊,是大的数据啊,都得放什么里面,都得放这个堆区里面来操作知道吧,那这里面就存在什么,存在一些简单的一些,这个是呃小变量啊是不是就可以啊啊那这里面还需要跟大家去理解个东西循环。
27:11
循环啊循环不能写在这里面啊,循环。循环会把成会把那个计算机搞死吗?会不会不会就是对就是死讯啊,就是这样,我说的就是死循环啊,死循环会不会把这个这个电脑搞死啊,不会啊,为什么不会呢?首先它第一点是怎么的,是啊是。不会占满什么呀,内存不占满内存你电脑始终能动,知道吧?呃,CPU会占满吗?会占满CPU,但是占满CPU它怎么的,它这个东西只是你后面东西就在那排队,是不是你进来之后再往里进,再往里进,是不是只要内存没占满,电脑不会怎么的死机,是不是啊啊电脑不会死机,这是第一种,还有第二种就是递归,递归会怎么的,递归会会电脑会死吗?会啊,电脑递归会死啊,这个都是这个等就就业班的时候,那个让老师给你去讲这个东西为什么递归会死机,而非递归的东西不会死机,就是因为怎么呢?是呃是循环,它不会把这个内存占满,不会占满,因为这里面几个变量,比如说这个写个循环里面是不是可能就是一个变量,是不是就完事了,他不能把这个内存占满,是不是,咱们可以看一下,写个死循环来给大家演示一下啊,这多无聊啊,是啊,你也觉得无聊啊,啊,写个死循环,然后。
28:41
这是死循环吗?好尴尬呀,好尴尬,这是不是一个死循环呢?是了,调试开始执行。你看这这里这这里面是不是一直在这等待啊,我们把这先给他,这个是打开任务管理器啊。
29:01
换线。你看我我这个内存,诶,这怎么这个CPU也没占满呢。我这个内存首先我放点东西,比如说这里面给他这个是括括起来。打印啊,打印的时候也不一定也不一定会占满啊,好,就比如说打印个什么,打印一个这个是计算呢,计算他也不会死机啊,比如说打印个A啊,每次就打印A。你做A加加,那不是计算吗?那也不会死机啊,调试看是呃是行,那同学数是计算啊,是百万D斜杠N,呃,不写杠N了,因为这个写。逗号,然后是。特你看设计要要计算的多麻烦。哎,佳佳可以吧,是不是是不是计算呢,主要是开始执行,是不是在计算呢,这是个死循环啊,任务管理器。
30:02
看CPU是不是占满了吧,哎,怎么又不满了呢?CPU占满所有电脑还挺好的是不是,你看这个内存是不是始终没有发生变化啊,啊,你看我把这关了之后,这个CPU是不是能节省很多,看一下关了之后。内存是不是还没发生变化,还是45,是不是这个CPU一下降了多少,降了40%多吧,这40%多是不是内存是不是一点没发生变化,为啥呢。咱们再拿这图给大家讲一下,这个死循环中,它给你建立这个变量啥的了吗?是不是没建立变量是不是啊,那这里面你要死循环情况下,想想想把程序干死情况下,你可以有这种方式怎么的开P对空间是不是,那这样情况下就死了,平时平时你写的这个这个什么呀,这个死循环他并不一定会怎么的,把你这个电脑给你去做了,这个这个什么很严重操作是不是,但是你要写递归的情况下,可能就不一样了,他那个递归情况下,可能直接就把你这个占满了,占满是占满哪啊知道吗?啊站满站区啊,注意一下这后面讲的一个东西就是这个是。
31:03
是递归递归啊呃也不会导致死机,它会怎么呢?它会这个是呃会会导致程序崩溃吧,是不是啊啊崩溃崩溃。原因什么原因是这个是战役出了啊,所以说你在写程序的时候注意这两点什么,这两点就是这个是呃,在怎么在操作的时候,一定要保证战区的一个数据怎么着。大小是这个小于战区这个大小,呃,不是是这句话说的能懂吗?我用精练语言啊,是战区的数据尽量小于战区的大小,能明白这句话意思吧?啊所以说你很多操作情况放在哪操作,放在这个是堆去操作,那这里面我就需要看一下这个堆去操作了。那堆区那是根据咱们这几步情况下是怎么的,是呃开房申请,然后押金,然后是呃钥匙,然后是做动作,呃不是是呃呃做做操作,然后是呃退出这个是什么呀?退出这个。
32:10
退出什么,退出这个堆区是不是啊,那我们下堆区大小能开辟多大空间看一下啊,那比如说还有我们这同学啊,再给大家来演示一下开辟堆空间了啊,注意下这里面,呃,后面会讲啊,咱们先来一遍啊,请大家先讲内存的时候先把这个讲一遍啊,是开辟。堆空间。那对空间能开辟多大呢?如说这里面是通过一个函数叫malo开闭对空间啊,后面写大小啊,比如说这里面写的是。多少了,再加俩零,反正是多乘以个size of。这一下就乘以一个解乘以个四是不是啊,那我这里面开辟空间是int,星P等于malo,这里面这样写啊,是int。Int星啊,这样写完就是开辟空间啊,那开辟多大空间呢?是开辟。
33:08
40亿空间大小是不是啊,开40亿空间大小,那我们看一下这个,现在现在看一下内存管理啊,看一下呃,任务管理线。现在是内存多少啊,40,然后运大概40多调试开始执行。现在是400兆啊。效果啊,四百四百兆是没效果,400兆是没效果啊,再加个零,现在是多少4G了吧,4G有点悬,那我这里面换的啊,就乘以个三啊,开个23G是不是可以啊,乘以个二吧,是不是现在是2G吗?是吗?你别骗我啊,我看一下任务管理器啊,啊,为啥?因为这个程序营结束了是不是啊,开辟空间自动释放掉了,是不是我得加个断点是不是啊,加个断点啊,这个是开辟对空间,然后程序营结束,这对空间自动被释放掉了,是不是啊啊所以说这里面没效果啊,这里面有开P空间,然后加个断点调试开始执行,一会儿我给大家解释代码啥意思啊,别着急,好开PD空间了,看一下内存,内存。
34:12
Yeah。开PD空间失败了。二十二十个G了,你看我就觉得这个这个数不对嘛,来咱们在这边演示一下啊,这里面给大家说一下是什么意思啊,是申请一块对空间,这对空间申请多大呢?现在我看一下是这200兆吗?100多兆是不是大概100多兆是不是那加个零呢?是。一个多G吧,一个多G是不是我加多点啊,是差。然后加断点,然后再看一下啊。啊给他唱啊加断点,然后这里面给它暂停一下,调试一下啊调试开始调试。
35:00
看一下有没有认为,诶怎么不变呢,你先下。这是不是空的,这个空间是不是该有,还有啊,我程序没结束,这个空间还在啊。你看你的P是没有分配成功入变量这里取变量P等于空吗?这怎么回事,这个这么大创建不了吗?少一个看一下,我再暂停一下啊。正式开始执行。哎,不是现在开始调试啊,调试开始调试。这把有了吧,这把这个多大空间呢。百两百兆是不是我把这个任务管理器关了是不是,然后任务管理器看一下48了,这感觉也不对呀。你看你看一下,这就能看出来,这看出来是不是DD10是不是这咱们程序啊,现在占内是空间多大,是这个是190多少是不是啊,那我们再再再给换个数啊,给它这个是暂停一下啊,乘以个四啊,乘以个四乘以个八也行,是不是啊,那现在800多少是不是咱们看的时候这个百分比就变了吧,是不是啊,诶不是不是点错了啊sorry,调试开始执行。
36:17
然后打开任务管理器。700多兆吧,是不是这个内存是不是飙升起来了吧,这是我们程序开辟对空间,那整个项目整个什么呢?整个这个是我我这一个项目能开辟多大一个对空间呢?那看一下首先得看一下什么呀。得看看内存多大是不是啊。我内存八个G的,然后这个是可用是7.9个G是不是啊,但是这7.9个G怎么的是不能都给你,是不是都给你别的程序是不是运行不了的啊,那这里面应该多大空间的是是不是除了这三个程序占的空间之外,剩下是不是都可以作为对空间开辟啊啊反正现在我们开辟是是呃,800多兆是没问题的,我记得我在上个班我开辟过两个两个兆的内存空间呢,我记得是呃不两个G的两个G内存空间呢,乘以个两个G的话,乘以个16是不是。
37:12
20啊乘以20,那不还一样吗?看一下能不能开屏成功调试开始执行,应该不会崩了,没有关系,空了就空了就崩了啊,两个G的不行,那这里面是先开个一个G的试一下。就是。报警。循环,开辟空间。任务管理器啊,看一下。程序呢,954是不是将将近一个G空间啊是不是这个空间开屏大小可可是不是比较大啊是不是,那比如说你这个弄个游戏是不是啊,900多个G是不是可以都都这么弄完微存中是不是应该没问题吧,是不是你一般情况下,只要你不玩一些大型的这个游戏是不是都可以啊,那900多G什么崩了吗?没崩啊啊sorry,我说说错了啊,九百九百多个兆是不是至少至来说900多个兆是不是保证不崩啊啊这个开闭堆空间大小和你的内存有关,记住这句话啊,和你内存有关,比如说你内存就是两个G的,你这这家最多也就开辟2G是不是啊,就最理想值是不是也就2G啊,那比如说你内存是16个G的情况下,你开BD空间是不是可能更大一点啊,这堆空间大小是没有限制的,只是除了其他这三个之外,占的是下,是不是你都是堆空间占的啊,这是开辟堆空间大小,那开辟完这个大小之后,是不是我们可以把这个当做数组一样去操。
38:40
做这个里块内存了啊,这个里面就比较麻烦了,就不给大家操作了,咱们下午就讲内容内容啊,这是我们讲的这个内存四驱的这个模型啊,内存四驱这种哪区呢?代码区存放的是程序质量,数据区啊数据区少一个少一个什么少一个是当时当忘给大家写了,是说了没写啊是对这个变量和一个什么呀,和一个是还有叫什么啊,常量是不是,嗯,常量在哪啊,在这个是。
39:09
数据区啊,还有什么吗?在数据区的我看一下,看一下讲义啊,讲义啊,在数据区的还有哪些内容。啊。没有是不是啊。没有啊,没有就无所谓了,就这大概这些内容啊,是他们存放的这个四区成语指令,那在我这程序中,我可以唤醒这个指令,是不是在其他这个程序中也可以唤醒我这指令,知道吧?啊,就是比如说你上美国政府,你要办点啥事儿,你就你去找美国政府是不是也好使啊,美国人来找中国政府是不是也可以啊,但是有些程序指令是可以怎么样对外公用的,比如说你要申请这个中国国籍,是不是美国人申请中国国籍,你来这儿是不是可以啊,但是你有些这个,比如说这个怎么样,我我要这个什么样,这个举报上访,是不是美国人来中国是能行吗?不行,是不是啊,这个是什么,我不受理这个东西,所以这个指令有一部分是可以怎么的,就是我的程序的指令可以对外公用是不是啊,但是有些程序指令只是对我这个这个怎么着自己内部去使用的啊,就是这个过程,然后公共设施这里面包含的都是一些什么呀,数据区域啊,就是你程序创建数据区域,还有一些这个呃呃,常量什么都在这里面来那个战区,这里面存放的什么变量数组,注意一下,只有C语言把数组放在。
40:22
在战区存储知道吧,其他的这个语言就不放在战区了啊,比如说你定一个大的数组啊,比如说定一个大数组,这个特别大的数组,诶他也不挂,那张明在哪啊,正在堆砌操作是不是,那记不记得这个大家刚上刚刚怎么刚开学的时候不是刚咱们刚讲数组的时候说过一问题,什么问题啊,就是我说那个是每年中考有大,不是不,每年高考有790万人,790后面万万万啊,我说咱们可以通过开辟数组来操作,那你确定这个能开辟数组操作吗?看一下能不能开辟数组操作啊,我记不记得就是讲数组之前我说那个,如果你定义变量,是不是定义790万变量是不是比较麻烦一点啊啊,你发现这里面如果你开辟790万个数组,看一下能不能挂啊,开始执行挂了吧,是不是其实数组也不行,没有什么呢?咱们后面讲的这个对空间才可以完成这个操作,知道吧,当初是骗你们的啊,居然一个一个都没觉得上当受骗,是不是证明你们学的还不好啊。
41:24
先不信人,我是骗你没有啊,不是还有其他解决办法吗?是不是,嗯,那你当初你想想定义790万个变量方便,还是这个定义个数组方便啊,是不是数组方便啊啊但数组这个虽然方便,但是错呀,是不是好这是内存四驱模型啊,这是占区,占区存在什么存的是变量数组啊,包括结构体这俩的情况下,在这个其他语言中,它就在不同的位置,因为你的结构体定义的时候怎么着,是啊,结构体结构体定义诶这里面不能错放啊,结构体定na的时候也可能怎么的,也可能超过这个大小吧,是不是,因为我们这里面还有这个什么结构体数组是不是存在啊啊包括这指针,也包括一什么指针数组是不是都可能造成什么样溢出,是不是啊,然在其他语言中可能就不会出现这种情况了啊,枚举和这个函数参数啊,你调用的函数参数啊,它的什么呀,就是这前面跟大家说了,它的程序质量,就是函数的这个质量放在这个代码区,它的参数包括里面建立这个变量在哪啊,在这个是站区堆须存放这个你要操作的一些大的文件。
42:24
比如说这个音频文件,视频文件,图像文件,包括这个文本文件,大的数据全在这里面操作啊,这个空间大小没有一个固定大小,跟你的什么有关的。内存有关是不是,那这个呢,这个这个站区呢,是一般情况下就是一兆左右,是不是好像也能看得到,但是应该是在哪看呢?是在这个是程序右击选择这个是属性。在连接器里面看到的吧,还是在哪看到的。站的大小就在系统里面,系统里面是哪个,是这个吗?站的大小有吗?有写了吗。
43:01
没写是不是啊啊,这你可以去更改的,应该是这个啊,这里面这个应该正常情况,就在练习器里面能看到这个大小,但我这里面没有,你可以看下,你那里面应该也没有是不是啊,这里写的吗?啊写着呢是不是看是指让虚拟内存分配的保存大小为这个是什么一兆是不是啊。就有的时候这个是面试的时候,你说一兆就可以了,是不是,呃,因为这个东西怎么这是它也不是一个固定的大小,这里面因为一般情况下Windows是一兆,一兆到八兆不等,Windows是一兆到16兆不等,但至少你说一兆它保证怎么正确是不是,你可以说大于0.38兆是不是,嗯呃,相信啊,这是咱们什么,这是咱们那个讲的这个是内存四驱模型啊。
我来说两句