轻松学C语言之动态内存管理以及变量.pptxVIP

轻松学C语言之动态内存管理以及变量.pptx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章 动态内存管理以及变量的存储类别C语言中,动态内存分配也就是在程序运行中实时申请内存分配。这有利于我们对任意多的数据进行处理。如果这些数据不用了,我们也可以随时释放。对于变量的存储有4种存储类别:auto(自动)、register(寄存器)、static(静态)和extern(外部)。本章主要讲解动态内存管理以及变量的4种存储类别。13.1 动态内存管理的来源C语言中,只运行使用系统分配的内存,如果系统没有为变量分配内存,那么会出现什么情况呢?如图13.1所示。13.1 动态内存管理的来源13.1 动态内存管理的来源缺点说明数组的大小是固定的所以它所占的空间在内存分配之后的运行期间是不能改变的,所以这样就要求我们事先为其分配较大的空间,保证程序运行时不会溢出 数组需要一块连续的内存空间如果对于一个系的各班定义一个数组,每个班的学生个数不一定相同,那么就很难定义数组的长度。过大会造成资源的浪费,过小又会造成溢出,影响程序的运行13.1 动态内存管理的来源13.2 动态内存管理当我们要进行动态内存分配时,我们首先要进行内存分配。当程序对分配的内存空间执行完毕后,我们要将分配的空间释放掉,从而提高了内存空间的利用率。但是,当我们分配的内存不够使用时,我们需要重新分配存储空间。本节主要讲解怎样解决这一系列的问题。13.2.1 动态存储区域分配空间我们使用动态存储区域分配存储空间可以使用以下2个函数实现:malloc()函数、calloc()函数。1.malloc()函数实现动态存储区域分配空间的函数malloc(),其调用形式以及参数说明如图13.4所示。2.calloc()函数calloc()函数实现在内存的动态存储区域中分配n个长度为size的连续存储空间。它的调用形式以及说明如图13.6所示。2.calloc()函数13.2.2 释放动态分配的存储空间当动态分配的存储空间已经不再被使用时,我们应该释放掉它,把它交还给系统,使系统可以重新对其分配。C语言中,对于释放动态分配的存储空间我们使用free()函数,其调用形式以及说明如图13.9所示。13.2.2 释放动态分配的存储空间13.2.3 重新分配内存空间如果我们对动态分配的存储空间不合适,可以使用realloc()函数重新分配动态存储空间,其调用形式以及说明如图13.12所示。13.2.3 重新分配内存空间注意点解释重新分配后的空间新地址位置新的首地址不一定与原来定义的首地址相同,因为为了增加空间,存储区会进行必要的移动重新分配后的空间回收由realloc()函数分配的空间,也可以利用free()函数回收,以避免内存空间的浪费13.2.4 sizeof——判断数据类型长度符前面所讲的是关于内存动态分配空间,而在在程序设计中我们是直接指定了分配内存大小空间。但是这样不利于程序的可移植性,因为在不同的计算机系统中,统一数据类型所占用的内存空间不一致,为了解决这个问题,C语言提供了一个判断数据类型长度的操作符——sizeof。sizeof对于数据类型的操作如图13.14所示。13.3 变量的存储类别C语言中,每一个变量和函数都有两个属性:数据类型和存储类别。数据类型大家已经熟悉,存储类别是数据在内存中存储的方式。存储方式分为两大类:动态存储类与静态存储类。具体包含4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。根据变量的存储类别,可以知道变量的作用域和生存期。13.3.1 静态存储方式与动态存储方式内存中的供用户使用的存储空间可以分为三部分,如图13.16所示。13.3.1 静态存储方式与动态存储方式13.3.1 静态存储方式与动态存储方式存储类别存放的数据存储空间的分配与释放存储单元静态存储全局变量全部存放在静态存储区。在程序执行开始时给全局变量分配存储区,程序执行完毕就释放。数据占的存储单元是固定。动态存储函数的形式参数、自动变量(未加static声明的局部变量,在后面的章节中会讲到)、函数调用时的现场保护和返回的地址。在函数调用时对数据动态分配存储空间,函数结束时释放空间。数据所占的存储单元根据需要分配。13.3.2 static——声明静态局部变量静态局部变量的含义如图13.18所示。13.3.2 static——声明静态局部变量13.3.3 自动变量函数中的局部变量如果声明为非static存储类别的,都是动态的分配存储空间的,这类变量也就是本节所讲的自动变量。对于自动变量的声明,我们可以使用auto关键字声明,也可以省略关键字。如果省略关键字,那么隐含意思也是自动变量。如图13.20所示。13.3.3 自动变量13.3.3 自动变量局部变量类别存储类别初始值默认值静态局部变量静态存储类

文档评论(0)

erterye + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档