Luc*_*ore 22 c++ heap stack automatic-storage
与SO上的很多问题和答案相关,我已经了解到最好引用其生命周期被管理为驻留在自动存储而不是堆栈中的对象.
此外,动态分配的对象不应该被称为驻留在堆上,而应该被称为动态存储.
我知道有自动,动态和静态存储,但从来没有真正理解自动堆栈和动态堆之间的区别.为什么前者更受青睐?
我不是在询问堆栈/堆的含义或内存管理的工作原理.我问为什么术语自动/动态存储优于术语堆栈/堆.
Use*_*ess 32
Automatic告诉我一些关于对象生命周期的信息:特别是它自动绑定到封闭范围,并在该范围退出时自动销毁.
Dynamic告诉我,对象的生命周期不是由编译器自动控制的,而是由我直接控制.
Stack是一种容器类型的重载名称,以及通用call和ret指令支持的相关流行指令指针协议.它没有告诉我关于对象生命周期的任何信息,除非通过与C中对象生命周期的历史关联,由于流行的堆栈框架约定.还要注意,在一些实现中,线程局部存储在线程的堆栈上,但不限于任何单个函数的范围.
堆是一个重载的名称,表示一种类型的已排序容器或一个免费商店管理系统.这不是所有系统上唯一可用的免费商店,也不会告诉我有关分配对象的生命周期的具体内容new.
术语“静态存储持续时间”、“自动存储持续时间”和“动态存储持续时间”出现在 C++ 标准中。
术语“堆栈”和“堆”用于指代标准库(stack<>、make_heap()、push_heap()等)中与存储持续时间关系不大的功能。
从技术上讲,堆栈/堆分配是实现细节,而自动/动态存储是更笼统的术语。标准本身并不要求分配器必须使用堆栈/堆。因此,自动/动态是更恰当的用语,尽管我个人认为这种区别有点过于古怪。