00:00
啊讲什么,讲一个例子就是什么,就是这个变量的这个他们的存储范围。这是零九。零九这一上午写零九,其实这零九就相当于零五一样,是不是0405那样啊,右击添加一个新建项就是。幺零是。叫什么的作用域呢?是呃不是呃,是存储范围,数据存储范围啊,我说那没升呢,数据的存储范围是不是点C啊,这里面大家需要注意一个问题啊,就是刚才我在写的时候,这个写成个变量和这边变量是不是有冲突啊,这叫什么,这叫局部变量,是不是加俩加俩字啊啊局部红色的啊。好,我们去写一下啊,写一下这个代码,首先定义几个变量是in的类型的A等于十,然后然后是。Sta,然后是b int类型的B。
01:01
然后是sta。In的类型的。飞。等于十,我们不要打印他们这个值啊,我们打印的什么呀?它的地址看一下它的什么呀,存储范围存在哪个区域啊,然后再看一下下面这是变量,然后这是未初始化的静态变量,是不是初始化的静态变量,然后再来几个是int类型的ABC de int类型的F等于十,这俩是啥呀?FG等呃,Int类型的G。然后是类型的GHF,这这相等。那先先先先别搞了,我就这么起名得了,然后这里面是这几个啊,然后再来一个是in的类型的ABCDHI,然后是十。
02:07
印的类型的。嗯,是十等于零,然后是int星P等于and a。T星,呃,不是不是,这怎么P了呢,这啥TIJK,然后是。这样。L,嗯,L这里面是L是未初始化的啊,这里面换,呃,给咱俩换一下顺序啊,这个是。K这个是L啊,然后再来写个什么,写一个差星P等于。哈A窝w world,这是不是咱们到现在为止学的所有的这个数据类型嘛,是不是啊,除了结构体之外,声音好基本上都都怎么样,都都用到了吧啊就是呃,看一下啊,咱们整体的分析啊,第一个叫啥叫局部变量,是不是初始化的局部变量,这个直接初始化未初始化,因为怎么程序会报错是不是,那我就没写啊这是然后是B呢,是静态的未未初始化的静态的局部变量是不是啊,然后这个呢,叫初始化的静态的局变量是不是啊,然后abcde呢,是未初始化的全局变量,初始化的全局变量,然后是未初始化的静态的全局变量是不是?呃,初始化的静态全局变量是不是,然后是未初始化数组是不是啊,初始化数组,然后是未初始化指针,初始化指针,然后这什么这是字符串常量是不是啊,在这这里面应该再补充一个是什么是这个是。
03:49
呃,叫C叫什么叫。这样写啊。是不是可以啊啊,一个是呃字符数组是不是可以当字符数组啊,这是字符串啊,那我们打一下他们的地址,看一下他们地址分别是哪些啊,看一下首先是第一个PTF是局部变量A,然后冒号百冒呃局部变量A的地址,地址冒号呃局部变量地址就是局部变量A的地址,然后是百分号P斜杠N逗号一个and的A啊,这是第一杠,然后是呃局部。
04:34
静态,静态变量是未初始化的局部静态变量B的地址,呃,这里面是B,然后是初始化的。初始化局部静态变量。C啊,这里面写下初始化。
05:01
看一下我写的有没有毛病啊,因为这个比较多啊,这是前三个写完了,然后是EFGH,一个是未初始化,然后是全局。全局变量ABC啊,缺个D是不是啊,刚才就同学听到一直喊,我就不知道喊啥啊,是缺个E是不是啊,不是缺个D,然后是。FGH是初始化的变量,F是不是啊?这是F,还有的是哪个?还有是未初始化的,未初始化静态全局变量是不是静态全局变量,这是。G,然后这个是G啊对,我得把这个代码全屏一下,有同学说看不到了啊,诶这这样小一下啊是不是,是不是这样就能看到了吧,再放大一圈啊,放大一圈是不是全都看到了吧,然后是H了吧,啊是初始化的静态全局变量H,这里面对应的是H是啊,然后还有是数组是不是啊,这写的比较多是不是,哎呀。
06:24
是未初始化的未初始化数组,呃,I的地址冒号,百分号P斜杠N逗号一个别按的啊按的就就就整成另外一块了,整成哪块了?二初始化的这个数组是G,它的地址是G,然后是哪个,然后是又下一组啊把这分呃分开一下啊。是未初始化的指针和初始化的指针是不是啊。
07:03
PNT。未未初始化指针。的指针什么指针,那个是K的地址,注意一下这是什么指针的地址吧,啊,那用什么呀,按的按的什么呀,按的K吧,嗯,哎,这太小的情况下,我有种看不清的感觉。放大一点啊,放大一点这个这个就行了,这个我就能看清了,这个是,然后对应的是初始化的指针L,这是又一组,然后在下一组是下一组是一个,这叫字符串常量是不是啊PDF。呃,叫。符串字符串常量P的地址,冒号打分号P,斜杠N逗号一个的P啊这里面为什么打印P呢,而不打印and p啊知道吗?我需要看的是这个hello word这个位置啊,然后再看一下什么,再看一下是叫字符。
08:28
数组啊,数组是CH。他的地址这里面是CH啊就可以了啊,那看一下这里面我给你打印多少个是一二三四五六七八九十十一十二十三,就基本上涵盖了我们上课所学的这个所有的这个内容,那我们选择调试看一下啊,看地址,这地址有重复的吗?诶,好像有斜高安没加的吧,是不是有重复的吧,一个也没有重复的,因为咱们变都建立不同名字,这个变量怎么能发生重复啊,是不是斜杠N,如果发生重复就错了啊,这个是斜杠N,那我再看一下这几个值啊,要是开始执行。
09:15
看一下这里面打这个值,这个是绝变量A的地址是什么呀?是呃F8C8是不是啊,然后是未出发的这个地址情况就是什么呀?就是01137A164,那这俩位置是不是离得离得就很远了啊,我肉眼就能看到离很远是不是那下未初始化的局部变量和这个初始化的这个不是和啊,未初始化局部静态变量和初始化局部静态变量它俩挨的怎么着,明显就很近嘛,前面都是这个0137开0137A开头的,是不是这俩就很近,然后看一下是。未初始化的全局变量E,那是哪个?是这个吧,那这这俩挨着的是什呢?是未出始化,它和它一个是164,一个是16C,它俩是不是还是一个很近的,那是不是就是怎么的,就是未初始化的是不是在一块啊啊,初始化的在一块是不是?呃,这个怎么能放大一点呢?放大不了是吧?那咱继续看吧,这是呃,到这了吧,再往下一个是初始化的全局变量F对应的地址是什么?是00C啊,00C这是怎么的?是是在最最上面的吧?啊这里面还映射的一个问题,哪个在最上面是不是,哪个怎么着最先被定义是不是,是不是这样啊,是不是第一个是什么?是E吧?诶是哪个是E啊,E是在最最上面的吧,是不是,然后设置这个是FF紧跟着它后面的,然后后面是什么,是这个里面那个内容,是不是这俩是里面那内容吧。
10:54
啊,所以说这俩地址要比这俩地址怎么样,是大还是小啊,小是不是啊,是不是小啊,怎么看不明白啊,看图说话大家不会吗?啊,你要对照这个里面内容看一下啊,然后这里面是未初始化的什么未初始化的这个静态变量是G啊G和和什么和这个是E,你看它俩相差多少个啊对和这个B差几个字节啊四字节先来先来哪个后来哪个,是不是先来这个后来这个,因为它怎么的,它这个优先级别不是它这个创建这个不是他这个定义时间要比这个定义时间要怎么早那么几秒是不是啊,就跟双胞胎一样,是不是哪个是哥哥哪个地的,就看谁先出生了是不是啊好,然后是哪个,然后是这个是呃H了吧,呃,H和那个挨着很近的010,和这个014是不是还是很近的。
11:54
啊,这是初始化的,初始化的是一部分,然后未初始化是不是一部分呢?这两个部分,然后挨着挨着近的是怎么初始化的和另外一个初始化的是挨着近是不是啊?然后这是这前面这这几组数,咱们看完了,然后看下数组,未初始化数组是多少?是这个是00FC是898,然后另外一个是初始化的,这是几啊,868差多少个,30个,我们这个大小四十个吧,应该是呃16进制的,这也不一定差40个啊,这得自己算一下是不是?呃呃30,呃三应该是差多少啊,是零点,这个是减完,是零,这个是三是不是啊,是十进16进制中的30 16进制中的30,然后是不是40呢?三十四十八怎么差这么多呢?啊,差12无所谓啊,但是你看一下这俩数组未数。
12:54
数组初始化,数组和哪个和哪个挨的。数据微量还是近的都是FFCC,不是不是F00F,不是00CFF8开头的是不是这个,呃,是不是他们挨着很近的啊,然后是未处始化的指针是不是也在那啊对。
13:15
也在CCFN里面来是不是这些都在CF里面来是不是,那你就可以把知道哪些是在站内存中了,是这块在在站在站内存中了啊然后你看这个什么,这个是字符串常量P137开头的,但你看它这和另外几个137开头的差的是不是也很远的啊,这是七,这是什么呀?是A,你看这都是不是都是A啊啊这四边常量也是单独的一个区域,看到了吧啊,他们在一个区域,那怎么这些在一区域,那咱们现在能不能整理出现在这个,咱们打印这些东西是不是就在俩区啊,一个是数据区,另外是在哪区啊站区,那这个呃是站区的是什么?是局部变量是这第一个吧?啊然后是数组是不是这些啊,初入化数组和未输入化数组,包括指针是都在里面啊,还有一个什么字符串数组是不是也是也是数组其中一个是不是它在营里面,另外一些,另外一些什么是呃呃是叫局部变量是不是不是不是。
14:15
静态绝变量是不是也在这里面啊,就加sta t的和什么合成全局的是不是都在这里面啊?还有一个什么字符串常量也在这里面,但字符串常跟咱们挨着怎么着有点远是不是啊,有点远,这两个这两个区域挨的很近是不是啊?那看下咱们这个图啊,咱们这个电脑中不是咱们这个啊,讲义中有这个图,那看一下这个图的顺序什么样的啊?那首先我们把这个内存分成四区,哪哪四区啊是呃,占区,堆区,还有这个代码区是不是?呃,这三个区统称为叫静,呃,叫全局区,静态区或者叫数据区也行啊,这个名字咱们自己起的,它包含几部分呢?是未初始化数据区和初始化数据区以及什么呀?文字常量区域是不是这分为三个区域,是不是他们自己在他们自己范围之内的,他们挨着很近是不是跟别人的挨着是不是比较远的啊?那看一下一个站区的生长方向是怎么的,是向下增长,就是我们站区都是在内存的哪头啊,是最那头吧,是不是啊,你呃,是哪头啊,是呃,就是最小值是不是最大值啊,是不是在最大值那头啊,你有个程序,它给你分面空间,有程序往分面空间,有程序分面空间是不是啊?然后剩下什么?剩下是代码区是在最低地址这块来的是不是,然后中间呢,是什么?是我们这个是呃,数据区这块的啊,是或者静态区这块的是怎么是一数化的,还有是和常量挨是很近是不是,然后什么未数化的是不是,然后中间什么,中间是这个是堆区,堆区是不是那种很大啊,那我把这个给大家画一下,画一下它的这个内存示意图啊,保存一下,这叫内存四驱模型。
15:58
呃,笔记这是002叫内存四驱模型,内存四驱。
16:10
四区。那行,那个四驱是哪个四驱啊,四驱车的四驱是不是奥迪双钻,我的伙伴是不是。你们玩过吗?这种车我小时候也玩过啊。啊。这块存的什么,就是这是我们写下这是内存地址内存啊B。地址,这是内存高地址。那。唇膏。地址。首先这个地址存的都是这个代码,知道吧,那代码区。代码区,这个代码区是一个公共的区域,什么叫公共的区域呢?就是很多执行代码知道吧,比如说你也执行这句话,他也执行这句话是不是,那怎么就可能调用这个一个东西了吧,为了干嘛呀,省内存用的是不是啊,省内存用的都是调这个一块内存的区域啊,这是代码区,那代码区是可以给大家举个例子,比如说什么,比如说我打开这个是。
17:14
诶。打开这个是不是这个叫浏览器啊,浏览器这个它会怎么,它会在,呃,它这个是整个打开之后,它是不是也分这个代码区,然后还有是那个数据区,包括这个是对区站区啊,这也这么分的啊,比如说这里面有什么有是加了一个网页,那这俩网页是不是单单独这个网页,呃,他俩共享一块什么呀,一块代码区,那这样情况是不是,比如说我打开什么呀,打开这个是。打开这么多网页行吧,比如一堆网页,他们是不是都共用一块代码区啊,就不用再怎的不用再打开一个网页创建代码区,打开一个网页它创建代码区是不是节省什么呀?节省这个是啊空间是不是啊,怎么样去打开这么多呢?会吗?不会啊,嗯,不会可以学一下啊,这个我这没有手势啊,CTRL加T是不是打开啊,CTRL加W关闭啊。
18:04
Ctl加W关闭连网页你们都不会操作吗?CTRL加T是创建一个新的空间页面,CTRL加W是关闭一个空空空就关,关闭一个当前页面,知道吧?哎哟,我天呐。好,这咱们咱们继续说,咱不讨论你这个惠普管页这个问题了,不归我管啊代码区域,代码区域是怎么是,我跟你说了,是有一部分是公用的,知道吧,啊是比如说这个是部分公用啊写一下吧,叫。部分公用。咋了?这怎么这个又邪恶了?嗯。这有啥邪恶的,就是讲程序呢,是不是,然后跟的什么,跟的是这个数据区的一块内容啊,大概是到这儿啊,数据区的一块内容。这有啥邪恶的,我这个东西这个。我这都没邪恶,是不是你们就邪恶了?啊,然后改了颜色啊,就是数据区。
19:02
数据区,数据区看一下是是哪个在哪个是低地址,哪个是高地址,咱们看一下啊,这里面什么是,呃,是已初始化的。全局变量还有静态变量,还有以及什么呀,是。和这个常量数据,呃,常量数据咱们这里面还少少写了一个,在这里面是不是少写了一个。少写了一个什么,少写了一个是coins的,然后是。印他。啊,是。KCH了是不是,然后是我都不知道怎么KLMNMM等于十是不是啊,是不是少少写了个这个啊,这个是不是也在哪区,也在这个是和和哪个近的,和这个是杜鹃长亮比较近吧?啊,我们再单独打印一下,给他打印到旁边啊,打印旁边。复制一下叫。常量叫M,它的存储位置。这个叫。And m。
20:00
调试开始执行。哎呀,这不尴尬了吗?是不是好像讲错了,是不是啊,这这个里面这个这个这个东西是怎么的是。常量应该存在哪儿啊,存在这个是战区了啊,这是C语C语言只有C语言存在战区啊,就是咱们咱们为什么能修改呢?就是因为它存在哪区了,占区了是不是啊,这这里面还有一块讲错了,讲错讲错是哪块讲错了能找那图啊,不好意思啊。有块有块那个讲错了啊是。呃,等一下啊是。主页,然后是。等一下我打开一下,有个地方这个说错了,是这个这个模型里面说错了啊,是这里面注意一下这个常量是有一个区分的,是这个是字符串常量在在这里面,这个常量在哪?在这个这里面啊,是在这个战区里面啊。是常量啊,因为怎么的,因为我们通过这个内存地址是不是看到了啊,是改成十啊十的大小。
21:05
然后再演示给大家看一下什么问题呢?就是看一下常亮啊,常亮这个M存在地址和哪个进的。嗯。和指针进嘛,是不是啊指针进啊,所以说这个它这个常量,它这个这是一个什么呀?尾常量是不是啊,尾常量是存在哪的,存在这个是。呃,是战区的吧,啊这个问题注意一下啊,这个如果是你在这个C语言中,它这个就存在哪了,存在这个是呃数据区了吧?啊不是不是在C加加中就存在数据区了,但是在C语言都存在占区了啊,所以说这个值咱们怎么的能修改是不是啊,这个咱们刚才讲的有点问题啊。底范底范那个没有地址啊,底那有地址,底范那个存在这啊,咱们给大家演示一下,同学丽说另外一个问题啊,是什么是。呃,井号DEF。是max,然后是100。
22:00
PT。是饭。定义的常量。导航。这里面是and max这样写能能可以吗?Max这样不行是不是因为这这里面这里面虽然把这个max这里面这个值是这个max这个是存在这里面的,但是这个里面这样直接写是不行的,是不是啊,因为它这个在编译的时候会把这句话变成什么样的,是呃是呃,把这复制一下啊。到这为止,他把这个变成这个是100了,按那100是不是也错了啊,但是这个100确实是存在哪了,存在是。存在这个区的,存在这个是数据区的啊,所以这里面你先把这个成量放在这里面,然后咱们写另外一个叫什么叫,叫什么叫。米饭。定义的常量。存在。
23:02
呃,数据区。存在数据区啊,这个是需要注意的这个问题啊,啊,这个常量是存在这个占取的,一个是底范定义是存在这个常量区的。啊,这两块啊,那咱们再把这个什么,再把这个是这个改一下啊,不不是再把这个完善一下,是低地址这里面数据区,数据区的这部分怎么的也是部分公用的知道吧,比如说什么,比如说你这个成语中是不是有hello word,它成语中也有hello word,那你俩怎么的就共用一个hello word,知道吧。啊,这个叫什么部分公用。部分公用。那这个部分公用就是为是为了什么操作,是不是能节省内存呢?啊,然后是怎么是这个是占区的数据,占区的数据会给你共用吗。单独这个不会每个同学都有一个相就相,你要站区要公用的情况下,那你写了这个代码之后,别人想改不就改了吗?是不是啊,所以说战区的怎么的是不能共用的是不是啊,战区。
24:04
战区不是公用的,但别人你想访问你战区的数据,能不能访问到啊,可以吧,是不是啊,是不是公用的。嗯。不是公用。但是是什么可以被。访问啊,因为这块这块怎么样,这个区域没给你锁死,是不是您可以访问,那剩下留的这块区域都是什么区域啊,都是这个事啊。堆区是不是啊。堆雪那。堆区大小跟你有啥啥有关呢,是不是整个内存再减去这三部分区域,是不是就就是你的堆区大小了啊,那这里面写一下是呃,堆区大小,堆区大小是。是减去。减去。其他三部分啊的大小,这只是个什么,这只是个理想值,什么叫理想值呢?就是这个堆须你是不是可以用,其他程序是不是也可以用啊,那你可以用的情况下,就是理想值是什么?就是你的这个系存,那个内存现在还有多少,比如现在还有这个是。
25:16
四个G是不是你的理想值,是不是可以用四个G啊,啊,就是这个理想值啊,跟你的内存有关,你比如说跟你的物理内存有关,是不是啊,再再写一下是呃堆大小。堆大小。堆大小诶怎么选堆。大小和物理内存有关啊,注意一下。那这里面还需要跟大家介介绍一个内容,就什么,就是也算大家是额外了解知识点,因为马上下课了,还有知识点就是什么,比如说游戏。游戏的情况下会怎么的?比如说这个是你电脑说内存太小了,是不是加载不了光画质的,你调成个低画质是不是,那你说这个这个数据这个我再把问题重复一遍,比如说你个内存啊,只有两个G,是不是运行不了高画质是不是像这个GTR5知道吗?这个啊,这个高画质运行不了,只能运行低画质,那你说这个东西在那在那个硬盘中,就是这个整个游戏在硬盘中存的几种画质格式啊,是高画质,中画质,低画质三种格式吗?还是一种,还是两种还是三种。
26:21
来,大家思考一下。如果存在三种格式情况下,你那个一个GTR估计可能100多个G了,知道吧,那为啥呢?它是存在着一种格式,存在哪种格式啊。高画质知道吧,只有在什么,只有在加载到对内存中,比如说你这个电脑开不了高画质是不是,它会有读的过程吗?它读一张图片的时候,把这个画质给你怎么样压缩之后拿到内存中是不是,那你既然在内存中的情况,它用的都是什么,用的都是你内存中这个图片吧,它就是一个什么低画质的是不是啊,当你把它怎么的,就是程序运行完成之后,它怎么它就把这个壁画这类的东西怎么的给你删掉是不是,所以说你你你如果玩一个这个3D游戏,或者加载一个3D大场景第一次。
27:06
会很慢,知道吧,啊,比如说这个,比如说你电脑运行快的情况下,内存比较高,直接加高画质,它速度还真的比那个什么加低画质的时候速度怎的快,知道吧,就这原因啊,这是你这个因为因为怎么因为这个堆不够用,所以说出现这个问题啊。这是我们讲的这个,呃,高低脂低低脂啊,这个站区是怎么是向下生长的啊,这个还有一点说的是,呃,写写上去吧,叫站区是向下生长的。战区向下生长。双。省长啊,省省长啊,就是他下一个怎么下一个这个这个怎么的数据,它都都每次都怎么的,都是往下去追加的吧,啊这里面还有一个叫大小端对齐的问题,咱们就一般给大家讲啊大小端。对齐的问题。对齐,你先了解一下,有这个东西可以啊,这是咱们讲的这个是低地址高地址这块的,先把这个东西怎么的给它切过来,放在我们内存中保存一下,大家可以放学了啊,有问题可以提出一下啊。
28:21
有问题吗?啊。
我来说两句