欢迎来到天天文库
浏览记录
ID:5307435
大小:223.38 KB
页数:3页
时间:2017-12-07
《c_c++数据内存分配和指针使用中若干问题的分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、笫34卷第6期喀什师范学院学报Vo1.34No.62013年11月JournalofKasilgarTeachersCollegeNov.2013C/C++数据内存分配和指针使用中若干问题的分析王文龙(喀什师范学院信息工程技术系,新疆喀什844008)摘要:从c,C++编译器对数据进行内存分配的策略人手,详细阐述了内存分配策略,并对指针使用中的若干问题进行分析,给出解决策略,确保合理、正确的使用指针,从而避免产生异常和内存错误,保证程序的健壮性和正确性.关键词:内存分配;指针;栈;堆;中图分类号:TP312文献标识码:A文章编号
2、:1006-432X(2013)06-.-0036-030引言栈的剩余空间大于所申请空间,编译器将为程序提供栈区的内存空间,按照向低地址生长的方式分配连续的内存空在一个程序编译运行时,编译器需要为程序中定义的间;若申请的空间超过栈的剩余空间时,将报异常,提示栈各种类型数据分配内存空间,不同类型数据分配的内存区溢出(overflow).域和大小是不同的,C/C++语言也不例外.而在程序设计中,栈区分配和释放空间时,其操作方式类似于数据结构若不考虑内存分配的规律,则极易产生内存错误,会导致各中的栈.在函数调用时,第一个进栈的是主函数
3、中函数调用种问题.若产生内存泄漏,则程序运行速度会逐渐变慢,并语句的下一条可执行语句的地址,然后是函数的各个参数最终停止运行;若产生内存覆盖,则程序会变得非常脆弱,人栈,大多数c,c++编译器是由右往左将参数人栈的,然后很容易受到恶意用户的攻击.因此,掌握c『C++编译器为各函数中的局部变量人栈(静态变量不入栈).当本次函数调种类型数据进行内存分配的规律,对于避免内存错误和保用结束后,局部变量先出栈,然后是参数,最后栈顶指针指证程序的健壮性有着重要的意义.向最开始存的地址,也就是主函数中的下一条指令,程序由在C/c++中,分配的
4、内存空间地址可以由指针获取,指该点继续运行.而主函数可以看做是系统调用主函数,因针可以灵活的动态的对内存空间进行管理,对指针的灵活此,主函数中的参数和变量等的入栈和出栈与函数调用相使用可以很方便的解决程序设计中的很多复杂问题,也可同.以完成许多其它高级程序设计语言无法完成的功能.因此,1.2堆区指针在C,C++中占有非常重要的位置,应用非常广泛【l然程序在运行时用malloc或neW申请内存空间,系统将而,由于指针使用较为复杂,并且可以直接对内存地址进行为程序提供堆区的内存空间,按照向高地址生长的方式分操作,如使用不当,会引起异
5、常,也会使得整个程序崩溃.因配不连续的内存空间;程序员自己负责在何时用free或此,合理、正确的使用指针,既可以灵活方便的解决复杂问dde}e释放内存空间.动态内存的生存期由程序员决定,使题,也可以保证程序的正确性.用灵活.若程序员不释放,程序结束时可能由系统回收.堆区基丁以上原,本文从C/C++编译器对数据进行内存的大小受限于计算机系统中有效的虚拟内存,堆获得的空分配的策略人手,对指针使用中的若f问题进行分析,给出间比较灵活,也比较大.解决策略,确保合理、正确的使用指针,从而避免产生异常堆区分配和释放空间时,首先获得一个记录空
6、闲内存和内存错误,保证程序的健壮和正确性.地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空问大丁昕申请空间的堆结点,然后将该结点从1C/C++数据内存分配策略·⋯结点链中删除,并将该结点的空问分配给程』一,C/C++编译器分配的内存舒栈(siack)、堆外,对】大多数系统,会在这块内存空fuJ中的‘地址处i砖(IleaI)、全局(静态)(slati~-)、义字常量Ⅸ、程J孚代码等.次分配的大小,这样,代码中的delete语句才能l卜确的释I.1栈区放内存空问.兄外,rhT找到的堆结点的大小不一一定I⋯编译动分配释放
7、,存放两数的参数、局部变精、¨}{请的大小,系统会自动的将多余的那部分重新放入刈象等.栈【一般订㈣定夫小,能从栈中扶取的空问较少.若刚链I11-丁系统是朋链表来存靠{;的闲内存地址的、【太l收稿日期:2O13-(J6—03作者简介:}殳/t(1976一),男,湖南双峰人,副教授,硕j-要研究方向为信息安全与图像处理第34卷喀什师范学院学报·37·此堆区分配是不连续的,而链表的遍历方向是由低地址向}高地址的,此堆区空问是按照向高地址生长的方式分配voidmain0不连续的内存空问.finta;1.3全局区(静态区)a=fO;存储全
8、局变量和静态变量,初始化的全局变量和静态cout<
此文档下载收益归作者所有