栈的动态分配以及栈由谁管理的问题

我们都知道C语言提供了malloc等函数让程序员手动来分配释放堆空间,而栈空间一般是自动分配与释放的。

这里我要补充两点:

1.栈也是能动态分配的,C语言提供了alloca函数让程序员动态分配栈内存,且不需要手动释放,对没错,你来分配,主调函数返回时由编译器(生成的类析构程序)来给你擦屁股。但alloca不具可移植性, 而且在没有传统堆栈的机器上很难实现。当它的返回值直接传入另一个函数时会带来问题,因为他分配在栈上.

由于这些原因, alloca不宜使用在必须广泛移植的程序中, 一般使用的很少,不管它可能多么有用。

2.栈内存到底由谁来管理(释放)的问题。网上有的说是由编译器释放;有的说是由编译器确定,系统来释放。

对第一种说法,有人会说,编译器只在编译时候才用到,而栈内存在运行时才分配释放,与编译器有啥关系? 这就造成了误解。

对于第二种说法就更让人费解,什么叫由编译器确定?系统来释放?这里的系统是操作系统还是编译系统?一般人会误解读为操作系统释放内存。那如果是裸机呢哈哈?

我想说的是这些说法都不严谨,或者说含糊其辞,没有说到点上。

敲重点,看黑板:

严格来说栈是由类似c++中的析构函数来释放,而这个析构程序不是你写的,是编译器在编译期间自动生成的。程序运行时,就会在对象生命周期结束时执行。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值