- 课程名称:Linux C语言指针与内存
- 课程链接:Linux C语言指针与内存-慕课网 (imooc.com)
- 章节名称:
-
- 第4章:指针与内存
- 4-2 内存管理
- 4-3 变量和指针的本质
- 4-4 操作系统对内存的管理
- 4-5 函数栈以及数据段内存
- 4-6 函数指针与指针指向的数据访问
- 第4章:指针与内存
- 讲师姓名:
DavidChin
-
- 时间:2023-02-17 23:30
课程内容
-
内存:由操作系统统一管理
- 内存的大小于地址总线宽度决定的
- 总线的宽度代表了可以代表数字的大小
- 总线的每一位只能是0或1,即2种数字,所以总的总线宽度就是由2的倍数,即KaTeX parse error: Expected '}', got '总' at position 4: 2^{总̲线宽度值}
-
如果总线的每一位都可以放10种数字,从0到9,虽然可以保存更多的数值,但这些数据转化成电信号由计算机来控制,就会出现很多问题,比如电信号判断不清,出错率高,而使用0与1,只有两种电信号,有电与无电,可以最大化减少错误率
-
如果总线宽度为32位,那么地址总线可以管理地址编码可以从0一直到232−12^{32}-1232−1
- 8bit=1byte8bit = 1byte8bit=1byte
- 1K=210byte=1024byte1K=2^{10}byte=1024byte1K=210byte=1024byte
- 1M=220byte=1024kb=1,048,5761M=2^{20}byte=1024kb=1,048,5761M=220byte=1024kb=1,048,576
- 1G=230byte=1024mb=1,073,741,8241G=2^{30}byte=1024mb=1,073,741,8241G=230byte=1024mb=1,073,741,824
- 1T=240byte=1024gb=1,099,511,627,7761T=2^{40}byte=1024gb=1,099,511,627,7761T=240byte=1024gb=1,099,511,627,776
- 1P=250byte=1024tb=1,125,899,906,842,6241P=2^{50}byte=1024tb=1,125,899,906,842,6241P=250byte=1024tb=1,125,899,906,842,624
- 1E=260byte=1024pb=1,152,921,504,606,846,9761E=2^{60}byte=1024pb=1,152,921,504,606,846,9761E=260byte=1024pb=1,152,921,504,606,846,976
- 1Z=270byte=1024eb=1,180,591,620,717,411,303,4241Z=2^{70}byte=1024eb=1,180,591,620,717,411,303,4241Z=270byte=1024eb=1,180,591,620,717,411,303,424
- 1Y=280byte=1024zb=1,208,925,819,614,629,174,706,1761Y=2^{80}byte=1024zb=1,208,925,819,614,629,174,706,1761Y=280byte=1024zb=1,208,925,819,614,629,174,706,176
-
而64位总线可以管理百万以上G内存空间,所以有些太大了,所以目前通用使用48位来代表内存编号
-
这些内存分为两部份,以64位总线中的48位为例:
- 应用程序使用的内存地址从0开始到0x7F-FF-FF-FF-FF-FF
- 操作系统的地址空间从0x80-00-00-00-00-00到0xFF-FF-FF-FF-FF-FF
- 分开管理的好处
- 操作系统内存不会被占用,从而避免机器卡住,锁死,死机等现象发生
- 可以通过操作系统来强制关闭应用程序
- 使得操作系统更加安全
-
C语言程序是如何被调用的:
- main()函数就是所有函数的入口
- 操作系统知道入口后,就可以直接调用这个入口(Linux系统本身就是由C语言编写,所以当然知道这个入口)
- 进入main()中代码,程序开始执行
-
-
指针与变量本质
-
C语言是不允许直接操作代码段的
-
代码经过编译后,会保存在代码段之外,还要保存的数据
- 当前调用的函数
- 调用当前函数多少行
- 主调函数要返回的地址
- 这个函数中有哪些变量,这些变量的值是什么
- 这些数据都会保存在栈中
-
变量:变量名只是一个代号,变量的本质就是内存
-
C语言是一种强类型语言,也就是每一个变量都必须提前声明好其类型
-
指针保存的就是内存地址
-
学习心得
通过学习了解到指针变量与普通变量没有什么区别,其内部保存的都是值而已,只不过普通变量保存的是其类型的值,指针变量保存的是地址值
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦