嵌入式Linux C语言开发 教学课件 华清远见嵌入式学院 曾宏安 第3章 嵌入式Linux C高级用法.pptVIP

嵌入式Linux C语言开发 教学课件 华清远见嵌入式学院 曾宏安 第3章 嵌入式Linux C高级用法.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程目标 预处理 C语言中的内存分配 程序的可移植性考虑 C和汇编的接口 本章内容 3.1 预处理 3.2 C语言中的内存分配 3.3 程序的可移植性考虑 3.4 C和汇编的接口 本章小结 3.1预处理 3.3.1 预定义 3.3.2 文件包含 3.3.3条件编译 3.1.1 预定义 在C语言源程序中允许用一个标识符来表示一串符号,称为宏,被定义为宏的标识符称为宏名。在编译预处理时,对程序中所有出现的宏名,都用宏定义中的符号串去替换,这称为宏替换或宏展开。 预定义符号 宏定义 预定义符号 有一些预处理定义的符号串,它们的值或者是字符串常量,或者是十进制数字常量,它们通常在调试程序时用于输出源程序的各项信息 。 宏定义 宏定义是由源程序中的宏定义#define语句完成的;而宏替换是由预处理程序自动完成的。 (1)无参宏定义 无参宏的宏名(也就是标识符)后不带参数,其定义的一般形式为: #define 标识符 字符串 (2)带参宏定义 对带参数的宏,在调用中不仅要宏展开,而且要用实参去代换形参。带参宏定义的一般形式为: #define 宏名(形参表) 字符串 宏定义 3.1.2 文件包含 文件包含是C语言预处理程序的另一个重要功能,文件包含命令行的一般形式为: #include 文件名“ 对文件包含命令还要说明以下几点: 包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。 使用尖括号表示在系统头文件目录中去查找(头文件目录可以由用户来指定);使用双引号则表示首先在当前的源文件目录中查找,若未找到才到系统头文件目录中去查找。用户编程时可根据自己文件所在的位置来选择某一种形式。 一个include命令只能指定一个被包含文件,若有多个文件要包含,则需用多个include命令。 文件包含允许嵌套,即在一个被包含的文件中又可以包含别的文件。 3.1.3 条件编译 第一种形式 第二种形式 第三种形式 3.2 C语言中的内存分配 3.2.1 C语言程序所占内存分类 3.2.2 堆和栈的区别 3.2.1 C语言程序所占内存分类 一个由C语言的程序占用的内存分为以下几个部分。 栈(stack):由编译器自动分配释放,存放函数的参数值、局部变量的值、返回地址等,其操作方式类似于数据结构中的栈。 堆(heap):一般由程序员动态分配(调用mallo()函数)和释放(调用free()函数),若程序员不释放,程序结束时可能由操作系统回收。 数据段(data):存放的是全局变量、静态变量、常数。根据存放的数据,数据段又可以分成普通数据段(包括可读可写/只读数据段,存放静态初始化的全局变量或常量)、BSS数据段(存放未初始化的全局变量)。 代码段(code):用于存放程序代码。 3.2.2堆和栈的区别 申请方式 栈(stack)是由系统自动分配的;堆(head)需要程序员自己申请,并在申请时指定大小 。 申请后系统的响应 堆在操作系统中有一个记录空闲内存地址的链表,当系统收到程序的申请时,系统就会开始遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。 3.2.2堆和栈的区别 申请大小的限制 堆是向高地址扩展的数据结构,是不连续的内存区域;栈是向低地址扩展的数据结构,是一块连续的内存的区域。 申请速度的限制 堆是由malloc()等语句分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来很方便。栈由系统自动分配,速度较快,但程序员一般无法控制。 堆和栈中的存储内容 堆一般在堆的头部用一个字节存放堆的大小,堆中的具体内容由程序员安排。 3.3 程序的可移植性考虑 3.3.1 字长和数据类型 3.3.2 数据对齐 3.3.3 字节顺序 3.3.1 字长和数据类型 能够由机器一次完成处理的数据称为字,不同体系结构的字长通常会有所区别。 3.3.2 数据对齐 对齐是内存数据与内存中的相对位置相关的话题。 一些体系结构对对齐的要求非常严格。通常基于RISC的系统载入未对齐的数据会导致处理器陷入(一种可处理的错误);还有一些系统可以访问没有对齐的数据,但性能会下降。 3.3.3 字节顺序 字节顺序是指一个字中各个字节的顺序,有大端模式和小端模式。 大端模式是指在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。 小端模式是指与大端存储格式相反,在小端存储格式中,低地址中存放的

文档评论(0)

时间加速器 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档