因为C++规范不要求具体使用堆栈/堆模型来实现分配/释放,所以在C++规范中,术语“自动”和“动态”存储分别比“栈”和“堆”更可取。
除了堆栈和堆之外,是否还有其他可供选择的分配/释放模型?
发布于 2016-06-06 19:59:49
有很多关于分配器的研究(幸运与否),有不同的内存布局,隔离等。Andrei Alexandrescu写了一个关于这些CppCon 2015: Andrei Alexandrescu “std::allocator...”的很酷的演示文稿。你可能会发现它很有用。
他提供的一个例子可能会揭示一些可能性:
typedef Segregator<4096,
Segregator<128,
Freelist<Mallocator, 0, 128>,
MediumAllocator>,
Mallocator>
Allocator;分配策略:
如果object小于4096B,则使用;如果object小于128B,则使用
malloc)来分配内存块。因此,根据对象的类型,您可以使用不同的分配策略(还有一个基于堆栈的分配器可供选择)。
发布于 2016-06-06 19:47:28
术语观点似乎是基于错误的假设。
关于分配方案,很难理解你所说的“堆”是什么意思,但是如果你指的是动态分配对象的显式释放,那么C++从来没有正式要求过这一点。当垃圾收集在C++11中获得一些支持时,这是因为它已经是经过验证的技术,例如用于C++03的Boehm garbage collector。
C++确实需要并一直需要一个堆栈,但不需要该堆栈的任何特定实现。对于细粒度的协作多任务,我们可能会看到使用基于链表的堆栈的实现。不过,截至2016年,我还不知道有这样的情况。
https://stackoverflow.com/questions/37656427
复制相似问题