嵌入式工程实训第五天

项目名称苏嵌实训-嵌入式Linux 第5天
今日进度及任务函数、内存管理、关键字、符合数据类型
任务完成情况课堂内容总结完成
开发中出现的问题汇总
未解决问题
本日开发收获对函数、内存管理、关键字和复合数据类型学习更加深入
其他

作业
1.C语言free函数是如何知道要释放内存空间的?
     调用malloc开辟空间的同时,malloc会返回一个指针p,在指针p的后面(地址高于指针p的方向)为新开辟的空间,而在指针p的前边(地址低于指针p的方向)12个字节处,会有4个字节记录开辟空间的大小。当free的时候就去找那个数值,释放掉数值大小的堆空间。

2.static在什么样的情况下使用?修饰局部变量:
修饰局部变量:
     当需要改变局部变量的生命周期,即只赋值一次,直到程序结束才释放的时候用static修饰 该局部变量。
     在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。
     内存中的位置:静态存储区
     初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被 显示初始化)
     作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

修饰全局变量:
     只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。即当该全局变量只需初始化一次,不许其他源文件访问的时候用static修饰全局变量。
     在全局变量之前加上关键字static,全局变量就被定义成为一个全局静态变量。
     内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
     初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
     作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。

修饰函数:
     当需要函数只能在声明它的文件中可见,其他文件不能引用的时候可用static修饰该函数。
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。

注意: 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。

3.为什么要使用tepdef给类型重命名
     就是为了让在不同使用环境下让数据类型变得有“具体含义”。linux内核中,很多很复杂的“结构”,例如内存结构描述符,进程结构描述符,但它们也会有类似上面那种情况,需要用在不同的背景下;因此,经常使用typedef重命名。

课堂内容总结

函数
函数三要素:函数名、形参、返回值
1、函数名:
  命名–>自注释性 动词 + 名词 例子:add_user del_user删除用户
2、函数参数:
  实参是什么类型,形参就要定义为什么类型;

传数组名
  传一维数组名,用元素的指针;
  传二维数组名,用一维数组指针;
  传三维数组名,用二维数组指针
  传指针数组名,用指针的指针;
3、函数的返回值:
   return :正常退出;
  exit:异常退出

函数指针变量: 保存函数的入口地址;
函数名作用: 指针常量,保存函数的入口地址:(函数地址)
函数指针的作用: 做函数形参,实现回调函数
华为的编码规范
  入口参数检查
  函数的异常处理
   
内存管理
内存是稀缺资源

  1. 数据存放在哪?
    在这里插入图片描述

栈空间是系统管理的

堆空间是用户管理的

  1. 常见内存错误

内存泄露(大错误)、内存碎片、内存空洞
3. malloc/free

开销非常大
4.内存池

思路:将使用多次malloc操作改变成只使用一次 malloc/free是一个开销非常大的操作;
池化技术:解决开销大的问题

关键字:
register
作用:尽可能将数据保存到CPU的寄存器中;提高程序执行效率(省去了CPU 从内存抓取数据的时间)

static
修饰局部变量 作用:改变值后还存在 延长局部变量的生命周期,全部程序结束后才释放。局部变量只执行一次。

extern
外部声明 告诉编译器这个函数或者变量是在其他文件定义的

const
修饰变量,该变量成为一个只读变量(值是可以改变的)

在C语言里修饰变量名的权限,告诉编译器不能通过该变量变量名去改变改变量的内存空间,但可以通过指针修改。

注意:修饰某个变量时一定要初始化。离谁近修饰谁,谁就不能做修改

typedef
给类型重命名t ypedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名。typedef 是由编译器执行解释的,#define 语句是由预编译器进行处理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值