在线大讲堂嵌入式C语言高级编程
–
冯老师,北京总部
华清远见全国免费咨询电话:400‐706‐1880
北京总部咨询电话:
010‐82600385/6
嵌入式系统行业介绍
嵌入式系统行业介绍?以实现智能化为核心目标的移动互联网、物联网、云计算等是当前整个信息产业最热门的技术
?嵌入式系统是这些热门产业应用技术中最核心、最嵌入式系统是这些热门产业应用技术中最核心最关键的部分,是时下最热门、最有发展前途的行业之
之一
嵌入式系统行业介绍?嵌入式系统
?IEEE(国际电气和电子工程师协会)对嵌入式系统的定义:“用于控制、监视或者辅助操作机器和设备的装置
监视或者辅助操作机器和设备的装置”
?业内广泛承认的一个定义是:以应用为中心,以计算机技术为基础,且软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗有严软硬件可裁剪适应应用系统对功能可靠性成本体积功耗有严格要求的专用计算机系统。
嵌入式系统行业介绍?嵌入式工程师个人基本情况
嵌入式系统行业介绍?嵌入式工程师个人基本情况
?
软件开发平台的选择
嵌入式系统行业介绍
?未来嵌入式操作系统首选
嵌入式系统行业介绍
?硬件开发平台的选择
嵌入式系统行业介绍
?
处理器芯片的选择
嵌入式系统行业介绍
?软硬件人员的安排
嵌入式系统行业介绍
?企业人才需求现状
嵌入式系统行业介绍
?软件开发语言的使用
嵌入式系统行业介绍
言中管
C语言中的内存管理
?C/C++定义了4个内存区间
代码区/全局变量与静态变量区/局部变量区即栈区/动态存储区即堆区
储区,即堆区。
–静态存储分配
?通常定义变量,编译器在编译时都可以根据该变量的类型
知道所需内存空间的大小,从而系统在适当的时候为他们
分配确定的存储间。
分配确定的存储空间。
–在栈上创建
?在执行函数时,函数内局部变量的存储单元都可以在栈上
创建,函数执行结束时这些存储单元自动被释放。栈内存
创建函数执行结束时这些存储单元自动被释放栈内存
分配运算内置于处理器的指令集中,效率很高,但是分配
的内存容量有限。
C语言中的内存管理
言中管
–动态存储分配
?有些操作对象只有在程序运行时才能确定,这样编译器在
编译时就无法为他们预先分配空间,只能在程序运行时分
编译时就无法为他们预先分配空间只能在程序运行时分
配。
?所有动态存储分配都在堆区中进行。
?程序在运行的时候用malloc或new申请任意大小的内存。程程序在运行的时候用或申请任意大小的内存程序员自己负责在何时用free或delete释放内存。动态内存
的生存期由我们决定,使用非常灵活,但问题也最多。
C语言中的内存管理
言中管
–堆内存的分配与释放
?当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存贮
空间,用于存贮该变量或对象。当不再使用该变
空间用于存贮该变量或对象当不再使用该变
量或对象时,也就是它的生命结束时,要显式释
放它所占用的存贮空间,这样系统就能对该堆空
间进行再次分配,做到重复使用有限的资源。
?堆区是不会自动在分配时做初始化的(包括清
零),所以程序中需要显式的初始化。
C语言中的内存管理
言中管
?malloc/free
–void * malloc(size_t num)
–void free(void *p)
?malloc函数只关心申请的内存的大小。
?malloc申请到的是一块连续的内存,有时可能会比所申请的空间大。
申请到的是块连续的内存有时可能会比所申请的空间大其有时会申请不到内存,返回NULL。
?malloc返回值的类型是void *,所以在调用malloc时要显式地进行类ll id所以在调用ll
型转换,将void * 转换成所需要的指针类型。
释放一块内存中的一部分是不被允许的
?释放块内存中的部分是不被允许的。
?不允许重复释放。
C语言中的内存管理
言中管?malloc/free
?free(p)是释放p所指的空间,而不是释放p本身的空间。释放堆
空间后,p成了野指针。
?malloc与free是配对使用的,free只能释放堆空间。如果malloc返
回的指针值丢失,则所分配的堆空间无法回收,称内存泄漏,同
一空间重复释放也是危险的,因为该空间可能已另分配,所以必
须妥善保存malloc返回的指针,以保证不发生内存泄漏,也必须
保证不会重复释放堆内存空间。
C语言中的内存管理
言中管?malloc/free
–野指针:
?不是NULL指针,是指向“垃圾”内存的指针。“野指针”是很
危险的。
?出现“野指针”主要有以下原因:
指针变量没有被初始化
–指针变量没有被初始化。
–指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针
合法的指针。
–指针操作超越了变量的作用范围。这种情况让人防不胜防。
C语言中的指着函数
言中着
?指针函数
–指针函数是指一个函数的返回值为地址量的函数。通常一个函数都有返回值的数据类型。如果一个函数没有返回值,则该函数是一个无值型函数。指针函数只不过是一个函数的返回值是某数据类型变量的地址。
某一数据类型变量的地址
–指针函数的定义的一般形式如下:
<数据类型> <函数名称>(<参数说明>)
*<
{
语句序列;
}