重点---堆和栈

我们经常在c++看见“堆栈”,那么我们有没有这样的疑问:“堆和栈能分开吗?”。其实,可以这样说,在某种程度上说,堆是堆,栈是栈,他们是两种不同的存储机制。下面简要了解。

 :是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。

 :是由new分配的内存块,由程序员释放(编译器不管),一般一个new与一个delete对应,一个new[]与一个delete[]对应。如果程序员没有释放 掉,资源将由操作系统在程序结束后自动回收。(《c++编程思想》)

 

例如:我们在给函数传参时,一般会出现传值,传地址,传引用,传地址时就是将指向该内存块的指针指向地址对应的内存,从而达到修改该地址中的内容,传引用时我们是给变量取个别名而已,指针还是指向了哪个内存,所以穿指针和引用都会改变内存中的内容,而传值(我们熟悉的交换)就不会引起内存中内容的改变,这就和栈相关了,当我们将值传给函数时,函数首先会将参数压栈,函数返回,要出栈,这些工作都是由编译器完成的,返回后这些东西就不复存在了。

 

当然,c++中还存在全局存储区(例如:存放全局变量)和静态存储区(例如:存放静态变量)以及常量存储区(常量)

 

一般的,我经常会在程序中创建一个全局的对象指针,然后再在程序函数内部创建相应的对象,再将这个对象赋给全局指针,这样就避免了在函数返回时销毁对象,而我就可以继续使用这个维护的指针去继续自己的方法调用,因为全局存储区只会在程序退出时才销毁,除非显式的将该指针指向NULL。静态存储区(static),我们也经常使用,当我们将一个变量声明为static时,编译器就知道这个变量只会定义一次(防止重定义),一般出现在函数内部,这时,这个变量就相当于全局变量了仅有的区别是函数退出时这个static变量就销毁了。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值