为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第11天-C01GDB工具的使用

标签:
C
  • 课程名称:Linux C语言指针与内存
  • 课程链接:Linux C语言指针与内存-慕课网 (imooc.com)
  • 章节名称:
      • 第4章:指针与内存
        • 4-2 内存管理
        • 4-3 变量和指针的本质
        • 4-4 操作系统对内存的管理
        • 4-5 函数栈以及数据段内存
        • 4-6 函数指针与指针指向的数据访问
    • 讲师姓名: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}-12321

        • 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语言程序是如何被调用的:

        1. main()函数就是所有函数的入口
        2. 操作系统知道入口后,就可以直接调用这个入口(Linux系统本身就是由C语言编写,所以当然知道这个入口)
        3. 进入main()中代码,程序开始执行
  • 指针与变量本质

    • C语言是不允许直接操作代码段的

    • 代码经过编译后,会保存在代码段之外,还要保存的数据

      • 当前调用的函数
      • 调用当前函数多少行
      • 主调函数要返回的地址
      • 这个函数中有哪些变量,这些变量的值是什么
      • 这些数据都会保存在栈中
    • 变量:变量名只是一个代号,变量的本质就是内存

    • C语言是一种强类型语言,也就是每一个变量都必须提前声明好其类型

    • 指针保存的就是内存地址

学习心得

通过学习了解到指针变量与普通变量没有什么区别,其内部保存的都是值而已,只不过普通变量保存的是其类型的值,指针变量保存的是地址值limit
栈保存数据

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
9
获赞与收藏
1

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消