C语言本质笔记

C语言本质

1.ARM架构与汇编简明教程

  • 硬件结构在这里插入图片描述
    注:写一个程序,通过Keil或编译器烧写到Flash,转变成三条汇编指令(机器码),上电CPU取指令。
  • ARM汇编指令在这里插入图片描述

2.变量是什么

  • 变量变量,能变,就能读能写,必定在内存里,必定有一个地址,一个字节对应一个地址

  • 全局变量、局部静态变量:如何分配空间、如何赋初始值[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述
    需要自己写代码,从flash把初始值复制到内存中的地址当中。地址怎么来的?自己分配的,由链接器的参数决定地址(test.bin),按照基地址,根据变量在程序中的位置,确定全局变量在内存中的地址(由下往上)。为了线程(每个线程都有自己的栈)安全,尽量不用全局变量。DATA段的内存大小由有初值的全局/静态变量决定,存的是非零的全局变量的初始值;ZI段由无初值或初值为0的全局/静态变量决定。

  • 局部变量:如何分配空间,如何赋初始值
    在栈中,按照字节(变量类型)大小,从栈顶(高)开始往下(低)分配(满减),通过机器语言分配,先调整,再满减,SP-4。
    栈PUSH在这里插入图片描述
    栈POP(比方调用函数,函数中的局部变量用完之后空间就被释放)在这里插入图片描述

3.栈和堆

  • 在这里插入图片描述
    堆:就是一块空闲内存,可以使用malloc/free函数来管理它。
    栈:开始也是空闲的,除了基地址,控制不了它的运行,完全由机器操作。
char *str;
str = malloc(100);
strcpy(str,"sadjasdjs");

free(str);

4.函数是什么

  • 就是一系列的指令:一系列机器码在这里插入图片描述
  • 调用函数:让CPU的PC寄存器等于“一系列机器码”的首地址,就是函数地址
  • 怎么传递参数
    • 子函数无法修改实参?
      传递实参,相当于传递实参的副本,即只是把实参的数值拿出来,把数值赋给一个寄存器,然后函数会去使用一个寄存器,修修改改都跟实参无关。
    • 怎么让子函数修改调用者的变量?
      传递地址。

5.指针

  • 指针变量,也是一个变量,存放的是“首地址”
  • 使用指针的本质:使用地址访问变量
  • 函数指针的本质
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值