程序设计中的动态数组空间分配方法研究.docVIP

程序设计中的动态数组空间分配方法研究.doc

  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文档。上传文档
查看更多
程序设计中的动态数组空间分配方法研究   摘要:基于C/C++语言环境,详细论述了程序运行时以人机交互方式任意改变数组空间大小的动态数组分配技术。通过详细的C/C++代码实验提供了实现一维动态数组与多维动态数组的方法,对需要实现动态数组空间分配的C++程序设计者具有较好的参考价值。   关键词关键词:C/C++程序设计;动态内存分配;指针   中图分类号:TP301   文献标识码:A 文章编号文章编号2014)004000603   作者简介作者简介:王德超(1964-),男,博士,四川师范大学基础教学学院副教授,研究方向为计算机应用、算法设计与分析。   1 C/C++语言编译系统中的存储区域分类   C/C++语言编译系统将供用户使用的内存空间分为程序代码区、静态存储区、栈区(stack)、堆区(heap)和字符常量区5个区域[12]。程序代码区存放程序中函数体的二进制代码,该区域不允许手工操作;静态存储区也称为全局区,存储全局变量和静态变量,程序结束时变量所占存储空间由操作系统释放;栈区由编译器自动分配和释放,存储动态局部变量(自动变量auto)、函数参数值(形参);堆区由程序员手动分配和释放,C语言[1]中一般使用malloc、calloc、realloc、alloc函数、C++语言[2]则使用new运算符分配堆区存储空间(动态变量),C语言用free函数或C++语言用delete运算符释放堆区所分配空间;字符常量区用于存储常量字符串,程序结束后由操作系统释放。   2 C/C++动态内存分配   从堆(stack)上分配内存,又称为动态内存分配,这些内存单元在程序运行时通过函数或命令来申请,所申请的内存大小不受限制。在32位系统中,堆内存可达到4GB,由此可见,堆内存几乎没有任何限制。程序中使用堆区存储数据是一种灵活的方法,C/C++语言提供了一系列在堆区创建存储数据空间的函数或运算符,要求空间使用生存期结束时,必须调用free函数或delete运算符手动释放空间。如果只分配,没有释放,就会造成内存泄露。程序结束时,即便没有使用free函数或delete运算符,操作系统也会强制释放,但不推荐这种做法,毕竟有很多守护进程处于长期工作状态(如IIS等),长期地只创建而不释放,系统内存资源将越来越少,最终导致程序出错,甚至系统崩溃。对于堆区,频繁的new/delete等操作会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。由于堆内存分配是由C/C++库函数或运算符按照一定算法来实现,其机制很复杂,因此,堆的分配效率比栈要低得多[36]。   3 C/C++数组空间定义   C/C++数组空间的定义格式为“类型说明符 数组名[常量表达式1][常量表达式2]...[常量表达式n]”,其中,确定数组空间每一维大小的下标运算符[]内只能是“常量表达式”,包括直接常量与符号常量或由这些常量构成的表达式。默认情况下,C++语言不允许在内存栈区动态定义数组空间的大小,按变量与数组须先定义后使用的语法规则,程序中所需变量或数组内存单元是在编译期间静态分配的,即定义数组时数组大小只能在程序编译时由常量表达式明确确定,而不能使用变量作为数组下标大小以实现程序运行时动态定义数组的大小。因此,可能造成程序运行时所定义数组空间不够用,或者造成内存的浪费。而实际应用中通常所需数组空间的大小需要在程序运行时通过键盘输入来确定,这时需要定义由变量作为数组下标大小的动态数组。下面将给出程序设计中实现动态数组分配的方法。   4 C/C++动态数组空间分配   C/C++在程序运行时动态定义的变量或数组(动态数组)只能通过C函数或C++命令(运算符)与指针来实现。C使用malloc、calloc、realloc与alloc函数动态分配内存单元,用free函数释放动态内存单元;C++则使用new运算符分配堆区存储空间(动态变量),而用delete运算符释放堆区所分配空间。C动态数组定义的函数原型是“void *malloc(unsigned int size);”,或“void *calloc(unsigned n,unsigned size);”。这两个函数的功能分别是在内存的动态存储区中分配一个长度为size的连续空间与n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。函数返回值是所分配区域的第一个字节的地址,或者说,这两个函数是指针型函数,返回的指针指向所分配域的开头位置。释放C动态内存的函数原型是“void free(void *p);”,该函数的调用功能是释放指针变量p所指向的动态空间,使这部分空间能重新被其它变量使用,函数参数p应是最近一次调用calloc或malloc函

文档评论(0)

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

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

1亿VIP精品文档

相关文档