项目开发日报表——第五天

项目开发日报表——第五天

项目名称【苏嵌实训-嵌入式 linuxC 第 5 天】
今日进度以及任务学习C语言函数、内存管理、关键字、复合数据类型。
本日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量)按计划完成。编写代码输入字符串、帧头和帧尾,将字符串的合法帧识别出来;编写函数将两个数的值互换;练习使用函数指针数组;编写函数将句子中的单词位置颠倒而不改变单词内部结构;练习使用各种关键字和复合数据类型。
本日开发中出现的问题汇总1.free是如何知道释放多大内存的空间?
2. static在什么样的情况下使用?
3.为什么要使用typedef给类型重命名?
本日开发收获掌握了传地址和传值的使用区别和方法;学会使用了传入参数来让函数返回多个值;认识了Linux虚拟地址空间的分布;了解了malloc和free的实现;掌握了各关键字的使用方法和注意事项。
笔记当只使用不修改实参变量的值,传实参变量名;
当使用及修改实参变量的值,传实参变量的地址。

常见的内存错误:内存泄漏、内存碎片、内存空洞

栈空间主要存放局部变量、函数形参,由操作系统自动释放;
堆空间主要为malloc、ralloc、calloc开辟的空间,使用后需要释放。

内存池: 将使用多次malloc操作改变成只使用一次

register: 只能修饰局部变量,尽可能的将数据保存到CPU的寄存器中,省去了CPU通过总线从内存中抓取数据的时间,提高了程序的执行效率。

static: 修饰局部变量时,延长了局部变量的生存周期,程序结束后再释放(只执行一次);修饰全局变量和函数时,该变量或函数不能在其他文件被访问,只能在本文件中访问。

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

const: 修饰变量,该变量成为一个只读变量,告诉编译器不能通过变量名去修改对应的内存空间,可通过指针修改;修饰指针变量时,离 *p 近就是修饰 *p ,离 p 近就是修饰 p 。
问题回答:

1. free是如何知道释放多大内存的空间?
    系统在分配内存时除了分配指定的内存空间外,还分配了用于保存内存空间大小等信息,当使用free时根据之前的信息便得知需要释放多大的内存。

2. static在什么样的情况下使用?
    (1)当需要定义一个局部变量,生存期需要为整个源程序时,可以使用static延长该变量的生存周期。例如需要统计某一个函数在程序执行过程中被调用的次数,可以在函数内定义一个static int count = 0;每次执行函数时count++;最终count的值即为函数被调用的次数,但该变量只能在该函数内部被访问。
    (2)当需要定义一个全局变量或者函数,且希望它们只能在当前文件内被访问时,可以使用static限制其作用域,即只在定义该变量的源文件内有效。
    (3)预防多个文件中出现全局变量或者函数重名,导致出现重复定义的问题,同样可以使用static定义该全局变量和函数。

3. 为什么要使用typedef给类型重命名?
    (1)为了让在不同使用环境下让数据类型变得有“具体含义”,增加代码的可读性。
    (2)有时名称过长的类型书写起来比较麻烦,重命名简短的名字可以让类型写起来更方便。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值