为什么在C/C++中局部变量使用Stack?
发布于 2011-03-04 00:43:58
从技术上讲,C不使用堆栈。如果查看C99 standard,您将找不到对堆栈的引用。C++标准可能也是一样的,尽管我还没有检查过。
堆栈只是大多数编译器用来实现C自动存储语义的实现细节。
发布于 2011-03-04 00:42:37
本地数据存储-子例程经常需要内存空间来存储局部变量的值,这些变量仅在活动子例程中已知,并且在返回后不会保留值。为此用途分配空间通常很方便,只需将堆栈顶部移动足够大的空间即可。与堆分配相比,这是非常快的。请注意,子例程的每个单独激活都会在堆栈中为本地变量获得自己的单独空间。
堆栈分配要快得多,因为它真正做的就是移动堆栈指针。使用内存池,您可以从堆分配中获得类似的性能,但这会带来稍微增加的复杂性和令人头疼的问题。
堆中的还有另一层间接层,因为在获得正确的对象之前,您必须离开堆栈->堆。此外,堆栈对于每个线程都是本地的,并且天生是线程安全的,因为堆对所有内存都是免费的
发布于 2011-03-04 00:29:06
这取决于存储变量的实现。一些计算机可能甚至没有“栈”:D
除此之外,在调用函数以跟踪返回地址和其他一些事情时,通常会做一些内务工作。许多编译器实现没有为局部变量创建另一个内部管理方法,而是选择使用已经存在的方法,该方法实现了堆栈,只需极少的更改。
https://stackoverflow.com/questions/5183503
复制相似问题