堆与栈在C++编程中的区别详解

发布时间:2019-07-22 06:56:48   来源:文档文库   
字号:

堆与栈在C++编程中的区别详解
作者:翁振超
来源:《中国科技博览》2014年第12

        摘要:在日常使用中,我们经常会把C/C++编程中的堆和栈合称为堆栈,但实际上,堆和栈虽然同处于内存的动态存储区,却是有着完全不同的分配方式。本文对此进行深入的分析,以期从根本上区分这两个不同的概念。

        关键词:C++编程

        中图分类号:TP313

        引言 c++编程中,内存的分配和使用非常方便,其中堆和栈就是两种最常用的内存管理方式:堆是进程的全局数据内存存储区;栈是函数的局部数据内存存储区。在日常使用中,很多人对堆和栈的概念有所混淆,给初学者产生不小的困惑,所以有必要对堆和栈进行深入的研究,从根本上区分这两个不同的概念。

        一、C++中五大内存分区

        C++中,内存分成5个区,它们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。

        堆,就是那些由new分配的内存块,它们的释放并非由编译器负责,而是由应用程序来控制的。一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。

        栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。其中的变量通常是局部变量、函数参数等。

        自由存储区是由malloc等分配的内存块,它和堆十分相似,区别在于它是用free来结束自己的生命的。

        全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,它们共同占用同一块内存区。

        常量存储区,这是一块比较特殊的存储区,它们里面存放的是常量,不允许修改。

        二、正确理解

        c/c++中我们常提到堆栈,其实堆和栈是不同的存储空间。一般,c/c++编译的程序占用的内存可分为:程序代码区,静态存储区和动态存储区。堆和栈都位于动态存储区,但二者有诸多不同。栈空间是静态分配的,如:函数的参数、局部变量等,系统会根据其大小预先在栈中自动分配适当的内存空间,这一部分在其生存期内是固定不变的。而堆空间是动态分配,程序员可根据需要申请并指明大小,不用时可释放收回,如在c中用malloc()函数或在c++中用new运算符申请的空间。

本文来源:https://www.2haoxitong.net/k/doc/5a958fd658eef8c75fbfc77da26925c52dc59190.html

《堆与栈在C++编程中的区别详解.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式