MyC++之浅谈堆栈

来源:互联网 发布:博拉网络是做什么的 编辑:程序博客网 时间:2024/05/17 23:36

提到堆栈,说白了就是存储空间,都是内存的一部分,还记得当时学汇编是有个堆栈段来着,用来存储中断和调用函数时当前信息。那当然会对堆栈有种膜拜的情感,因为它可谓是操作系统一个核心,凭借的就是它的这种数据结构(后进先出等等)。

 

所以不管多大的程序,main函数一定是在栈底,当调用子函数时,先入栈的是参数,然后再是函数地址,中间就是函数里面的局部变量。这样就构成了函数的一个活动记录,在函数返回时活动记录就被销毁了。这就让我想起了C语言中所谓的单向传递和双向传递,还记得么?当传递进来的是变量值的时候,其实被调用函数这边会有个创建临时对象的过程,而这些临时对象则变成了传递进来变量的副本。所以也算是局部变量了、这下明了了 吧,而当参数类型是引用或指针类型时,操控的都是变量本身,当然就不会销毁了,所以当我们要传递的对象很巨大时,往往推荐用引用因为省时省资源嘛、、、何乐而不为~~~呵呵,因此,千万不能将局部对象的引用返回,道理都应该知道了吧。

 

C++中用到堆最多的或许就是newdelete,因为若要动态申请空间,则系统会在堆中开辟一段空间为我们所用,这是在运行阶段完成的,所以当然也就比静态分配的空间要灵活。既然如此,那我们只要使用动态申请空间得了?NO,什么事都有两面性,虽然说静态分配不怎么灵活,但是它快捷、省时、安全并且由系统自动控制。动态申请就不同了,它又程序员控制,所以你得时时刻刻盯着你申请的空间是否有被释放,若不注意,就容易造成内存泄露,这可是程序员的大忌也是非常不容易发现的BUG,所以养成良好的编程习惯是多么多么重要、、、

 

_____蜻蜓点水

原创粉丝点击