首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >变量作用域

变量作用域
EN

Stack Overflow用户
提问于 2011-03-04 00:23:57
回答 6查看 620关注 0票数 3

为什么在C/C++中局部变量使用Stack?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-04 00:43:58

从技术上讲,C不使用堆栈。如果查看C99 standard,您将找不到对堆栈的引用。C++标准可能也是一样的,尽管我还没有检查过。

堆栈只是大多数编译器用来实现C自动存储语义的实现细节。

票数 6
EN

Stack Overflow用户

发布于 2011-03-04 00:42:37

本地数据存储-子例程经常需要内存空间来存储局部变量的值,这些变量仅在活动子例程中已知,并且在返回后不会保留值。为此用途分配空间通常很方便,只需将堆栈顶部移动足够大的空间即可。与堆分配相比,这是非常快的。请注意,子例程的每个单独激活都会在堆栈中为本地变量获得自己的单独空间。

堆栈分配要快得多,因为它真正做的就是移动堆栈指针。使用内存池,您可以从堆分配中获得类似的性能,但这会带来稍微增加的复杂性和令人头疼的问题。

堆中的还有另一层间接层,因为在获得正确的对象之前,您必须离开堆栈->堆。此外,堆栈对于每个线程都是本地的,并且天生是线程安全的,因为堆对所有内存都是免费的

票数 2
EN

Stack Overflow用户

发布于 2011-03-04 00:29:06

这取决于存储变量的实现。一些计算机可能甚至没有“栈”:D

除此之外,在调用函数以跟踪返回地址和其他一些事情时,通常会做一些内务工作。许多编译器实现没有为局部变量创建另一个内部管理方法,而是选择使用已经存在的方法,该方法实现了堆栈,只需极少的更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5183503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档