1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CCH04分析

4.10.3 多文件结构 * 图4.11 多文件程序结构 OpenGL DirectX 4.10.3 多文件结构 * 表4-4 GCC和VC文件类型及扩展名 GCC Visual C++ 源文件 C语言:.c C++语:.cpp、.cc、.cxx C语言:.c C++语言:.cpp 头文件 .h .h 目标代码文件 .o .obj 链接库文件 .a .lib 4.10.4 头文件与工程文件 * 1.头文件 为什么要使用头文件呢? 我们现在已经知道,如果是多文件结构程序,欲在文件中调用别的文件中的函数,需要有函数的声明,而且每个文件均是如此。如果是函数声明比较多的情况下,在每个文件中都写上函数声明不是好办法,很难管理。例如:某个函数定义有变动,那么所有含有这个函数声明的调用文件都需要找出来,逐一修改。 4.10.4 头文件与工程文件 * 为什么要使用头文件呢? 使用头文件可以解决这个问题,其工作原理是通过将每个源文件中外部函数的函数声明等信息集中写到一个文件中,称为头文件(有别于源文件),而别的源文件只需用文件包含命令将这个头文件包含,则编译时编译器自然就有了函数声明。 4.10.4 头文件与工程文件 * 图4.12 多源文件时头文件的处理示意 4.10.4 头文件与工程文件 * 2.工程文件 多文件结构程序在编译时需要工程文件来管理,不同的编译器有不同的工程文件格式。 4.10.4 头文件与工程文件 * 图4.13 CodeBlocks工程文件管理 4.10.5 提高编译速度 * 提高编译速度 (1)预编译头文件 (2)增量编译 (3)编译缓存 4.11 函数应用程序举例 * 【例4.12】 Hanoi塔问题。 4.11 函数应用程序举例 * 图4.14 Hanoi塔求解示意 4.11 函数应用程序举例 * 图4.14 Hanoi塔求解示意 4.11 函数应用程序举例 * 图4.14 Hanoi塔求解示意 4.11 函数应用程序举例 * 图4.14 Hanoi塔求解示意 4.6.4 程序映像和内存布局 * data段和bss段的存储特点,决定了C程序中所有全局和静态变量、对象的存储空间在main函数运行前就已经存在,就有了初始值。程序运行到这些变量和对象的定义处时,是不会再有初始化动作的。在程序运行中这些变量和对象的存储空间不会被释放,一直保持到程序运行结束。期间如果数据被修改,则修改会一直保持。 4.6.4 程序映像和内存布局 * 4.栈 栈(stack)用来存放C程序中所有局部的非静态型变量、临时变量,包含函数形参和函数返回值。 4.6.4 程序映像和内存布局 * 4.栈 程序映像中没有栈,在程序开始运行时也不会分配栈。每当一个函数被调用,程序在栈段中按函数栈框架入栈,就分配了局部变量存储空间。如果这些变量有初始化,就会有赋值指令给这些变量送初值,否则变量的值就呈现随机性。当函数调用结束时,函数栈框架出栈,函数局部变量释放存储空间。 栈的存储特点,决定了C程序中所有局部的非静态型变量,其存储方式是动态的。函数调用开始时得到分配,赋予初值,函数调用结束时释放空间,变量不存在。下次函数调用时再重复。 4.6.4 程序映像和内存布局 * 5.堆 堆(heap)用来存放C程序中动态分配的存储空间。 4.6.4 程序映像和内存布局 * 5.堆 程序映像中没有堆,在程序开始运行时不会分配堆,函数调用时也不会分配堆。堆的存储空间分配和释放是通过指定的程序方式来进行的,即由程序员使用指令分配和释放,若程序员不释放,程序结束可能由操作系统回收。 C语言中可以通过使用指针、动态内存分配和释放函数来实现堆的分配和释放,详见第7章。程序可以通过动态内存分配和释放来使用堆区,堆区有比栈更大的存储空间、更自由的使用方式。 4.6.4 程序映像和内存布局 * 堆和栈的共同点是动态存储,处于这两个区域的存储单元可以随时分配和释放,所以这些存储单元的使用特点呈现临时性的特点。data段的特点是静态存储,处于这个区域的存储单元随程序运行而存在,随程序结束才释放,相对程序生命期,data段存储单元的使用特点呈现持久性的特点。data段由于持久占有存储空间,因此大小会被操作系统限定,而堆可以达到空闲空间的最大值。 4.6.4 程序映像和内存布局 * 堆和栈的区别是分配方式的不同,栈是编译器根据程序代码自动确定大小,到函数调用时有指令自动完成分配和释放的;堆则完全由程序员指定分配大小、何时分配、何时释放。堆的优点是分配和释放是自由的,缺点是需要程序员自行掌握分配和释放时机,特别是释放时机,假如已经释放了还要使用堆会产生引用错误,或者始终没有释放产生内存泄漏(memory leak)

文档评论(0)

586334000 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档