- 1、本文档共62页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[信息与通信]变量存储方式
C语言的强大功能之一是可以灵活地定义数据的存储方式.C语言从两个方面控制变量的性质:作用域(scope)和生存期(lifetime). 作用域是指可以存取变量的代码范围,生存期是指可以存取变量的时间范围. ????作用域有三种: ????1.?extern(外部的)??这是在函数外部定义的变量的缺省存储方式.extern变量的作用域是整个程序. ????2.static(静态的)??在函数外部说明为static的变量的作用域为从定义点到该文件尾部; ????3.auto(自动的)??这是在函数内部说明的变量的缺省存储方式.auto变量的作用域为从定义点到该局部程序块尾部.变量的生存期也有三种,但它们不象作用域那样有预定义的关键字名称.第一种是extern和static变量的生存期,它从main()函数被调用之前开始,到程序退出时为止.第二种是函数参数和auto变量的生存期,它从函数调用时开始,到函数返回时为止.第三种 是动态分配的数据的生存期,它从程序调用malloc()或calloc()为数据分配存储空间时开始,到程序调用free()或程序退出时为止. ?2.1??变量存储在内存(memory)中的什么地方? ????变量可以存储在内存中的不同地方,这依赖于它们的生存期.在函数外部定义的变量(全局变量或静态外部变量)和在函数内部定义的static变量,其生存期就是程序运行的全过程,这些变量被存储在数据段(datasegment)中.数据段是在内存中为这些变量留出的一段大小固定的空间,它分为两部分,一部分用来存放初始化变量,另一部分用来存放未初始化变量.在函数内部定义的auto变量(没有用关键字static定义的变量)的生存期从程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止.作为函数参数的变量只在调用该函数期间存在. 这些变量被存储在栈(stack)中.栈是内存中的一段空间,开始很小,以后逐渐自动增大,直到达到某个预定义的界限.在象DOS这样的没有虚拟内存(virtual?memory)的系统中,这个界限由系统决定,并且通常非常大,因此程序员不必担心用尽栈空间.关于虚拟内存的讨论,请参见2.3.???? ????第三种(也是最后一种)内存空间实际上并不存储变量,但是可以用来存储变量所指向的数据.如果把调用malloc()函数的结果赋给一个指针变量,那么这个指针变量将包含一块动态分配的内存的地址,这块内存位于一段名为堆(heap)的内存空间中.堆开始时也很小,但当程序员调用malloc()或calloc()等内存分配函数时它就会增大.堆可以和数据段或栈共用一个内存段(memorysegment ),也可以有它自己的内存段,这完全取决于编译选项和操作系统.与栈相似,堆也有一个增长界限,并且决定这个界限的规则与栈相同. ???请参见: ????1.1??什么是局部程序块(10calblock)? ????2.2??变量必须初始化吗? ????2.3??什么是页抖动(pagethrashing)? ????7.20?什么是栈(stack)? ????7.21?什么是堆(heap)7????. ????2.2??变量必须初始化吗? ????不.使用变量之前应该给变量一个值,一个好的编译程序将帮助你发现那些还没有被给定一个值就被使用的变量.不过,变量不一定需要初始化.在函数外部定义的变量或者在函数内部用static关键字定义的变量(被定义在数据段中的那些变量,见2.1)在没有明确地被程序初始化之前都已被系统初始化为0了.在函数内部或程序块内部定义的不带static关键字的变量都是自动变量,如果你没有明确地初始化这些变量,它们就会具有未定义值.如果你没有初始化一个自动变量,在使用它之前你就必须保证先给它赋值. ?调用malloc()函数从堆中分配到的空间也包含未定义的数据, 因此在使用它之前必须先进行初始化,但调用calloc()函数分配到的空间在分配时就已经被初始化为0了.请参见: ????1.1??什么是局部程序块(10calblock)? ????7.20?什么是栈(stack)? ????7.21?什么是堆(heap)? ????2.3??什么是页抖动(pagethrashing)? ????有些操作系统(如UNIX和增强模式下的Windows)使用虚拟内存 ,这是一种使机器的作业地址空间大于实际内存的技术,它是通过用磁盘空间模拟RAM(random—access?memory)来实现的. 在80386和更高级的Intel?CPU芯片中,在现有的大多数其它微处理器(如Motorola?68030,sparc和Power?PC)中,都有一个被称为内存管理单元(Memor
您可能关注的文档
- [信息与通信]中国移动互联终端产品及发展趋势研究.pdf
- [信息与通信]中庆显示屏同步系统V8解决方案用户手册.pdf
- [信息与通信]中级可靠性基础.ppt
- [信息与通信]中级无线电装配调试工复习题.doc
- [信息与通信]丰泽园小区视频监控系统工程.doc
- [信息与通信]串行232接口与USB接口的转接口设计.doc
- [信息与通信]串行外设接口SPI.pdf
- [信息与通信]串行通信.ppt
- [信息与通信]了解敏捷.pdf
- [信息与通信]二、三级管_MOS管特性测试.ppt
- From《梦魇绝镇(2022)》第三季第八集完整中英文对照剧本.docx
- Arcane《英雄联盟:双城之战(2021)》第二季第四集完整中英文对照剧本.docx
- A Man on the Inside《新手老卧底(2024)》第一季第五集完整中英文对照剧本.docx
- Bad Sisters《坏姐妹(2022)》第二季第三集完整中英文对照剧本.docx
- Copenhagen《哥本哈根(2002)》完整中英文对照剧本.docx
- A Man on the Inside《新手老卧底(2024)》第一季第八集完整中英文对照剧本.docx
- Caroline in the City《欢乐俏女郎(1995)》第一季第二十三集完整中英文对照剧本.docx
- Caroline in the City《欢乐俏女郎(1995)》第一季第二十一集完整中英文对照剧本.docx
- Georgie & Mandy's First Marriage《乔治和曼迪的头婚生活(2024)》第一季第三集完整中英文对照剧本.docx
- Corrective Measures《纠正措施(2022)》完整中英文对照剧本.docx
最近下载
- 2024年中考语文二轮复习:名家散文阅读(汪曾祺)练习题汇编(含答案解析).docx
- 职业资格认证 三.鉴定细目表 中式烹调师(中级)理论知识鉴定要素细目表.doc
- 来访人员登记表(模板).pdf VIP
- 中小型企业安全生产事故应急救援预案范文.doc
- 《中华民族一家亲》第一课时 教案.doc
- 【智慧树】【知到】大学生劳动就业法律问题解读(2024必威体育精装版版) 章节测试答案.docx VIP
- 酒厂危险源辨识及风险分级管控清单范本参考模板范本.pdf VIP
- 人教版四年级数学上册《田忌赛马》教案及教学反思.docx VIP
- 创业模拟实训培训.pptx
- 2024《城市居民参与生活垃圾分类的问题研究—以北京市A社区为例》论文答辩稿1700字.docx VIP
文档评论(0)