嵌入式培训学习历程第二十天

本文深入探讨了C语言编程中的关键概念,包括段错误原因、内存管理、反汇编命令、函数调用规则、预处理器、编译流程、符号表、变量生存期等。文章还详细解释了静态、自动、寄存器、extern、typedef、const、restrict、volatile等关键字的作用,以及变量初始化、作用域、链接属性等核心概念。

  1.段错误原因  : 访问了不存在的空间,  有空间但是么有权限

  2.static : 在内存上开辟空间

  3.objdump -dS  a.out : 反汇编命令

  4. gdb 中可以使用disassemble反汇编当前函数

    注意 : 小权限转到大权限会出警告

  5.p $esp : 打印esp的值。。

  6.函数调用和返回过程的规则

      (1). 参数压栈传递, 并且是从右向左依次压栈

       (2). ebp总是指向当前栈帧的栈低

       (3). 返回值通过eax寄存器传递

  7. c语言的预处理器  cpp

  8. _start 调用main函数 (_start 是汇编中的)

  9.  main.c -E main.i (预处理)

     main.i -S main.s(编译)

     main.s -o main.o(汇编)

     main.o  a.out (链接)

  10.查看符号表nm或readelf -s

  11.变量初始化或初始化为零放入.data段  

    变量无初始化放入.bss段

  12.符号

    两种一种强符号(已经初始化的全局变量,  函数的名字),一种弱符号(未初始化的全局变量)。

    强到弱  : 弱自动退化成声明

    强到强      : 报错

    弱到弱   :什么事都可能发生

  13. static    作用于全局变量,局部变量, 函数

        可以使用 调用,,被static修饰的全局变量 get_timer 和 set_timer

  14.  .bss段在文件中不占存储空间,在加载时这个段用0填充, 全局变量如果不初始化则初值为零。

  15.注意 :register :不能取地址

  16. restrict不可变的,和volatile可变的

  17. 作用域(scope)

        函数作用域 : 标示符在整个函数中都有效

        文件作用域 : 标示符从它声明的位置开始直到这个程序文件的末尾都有效

        块作用域 : 从它声明的位置开始到右}括号之间有效

        函数原型作用域 :标示符出现在函数原型(是声明不是定义),从声明位置开始到这个原型末尾之间有效

   18. 对属于同一命名空间,的重名表示符,内层作用域的标示符讲覆盖外层作用域的表示符

        语句标号单独属于一个命名空间

        struct, enum, union类型Tag属于一个命名空间

        struct, union的成员名属于一个命名空间

        所有其它标示符都属于同一个命名空间

            标示符的链接属性 :

                    外部链接,  内部链接, 无链接

    19.static : 用它修饰的变量的存储空间是静态分配的

      auto  : 用它修饰的变量在调用的时候自动在栈上分配存储空间。。

      register :尽可能分配一个寄存器来存储,如果不能当成auto变量处理

      extern :用于多次声明同一个标示符

      typedef : 定义一个类型名

  21 . const , restrict, volatile     : 类型限定符

  22.变量生存期 :

      静态生存期 :具有外部或内部链接,或者被static修饰的变量,在程序开始执行时分配和初始化一次, 以后便一直存在知道程序结束,通常位于, .rodata,.data, .bss段

      自动生存期 :无属性链接,并且没有被static修饰的变量。进入块作用域在栈上或寄存器上分配,在退出块作用域时释放

      动态分配生存期 : 在堆中分配空间,,通过free()函数释放。。

  23.volatile 作用 : 修饰一个变量,(告诉系统变量是可变的,易变的)

  24. 优化 :  -os 优化大小    -01 -02 -03 优化速度。

      英语 : disassemble (拆卸)  restrict (不可变的)  volatile (可变的)

  

转载于:https://www.cnblogs.com/cxw825873709/p/3254310.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值