除了堆栈和堆模型之外,还为C++实现了哪些其他形式的自动和动态存储

What other forms of automatic and dynamic storage have been implemented for C++ other than the stack and heap model?

本文关键字:其他 存储 动态 C++ 模型 堆栈 还为 实现      更新时间:2023-10-16

术语"自动"和"动态"存储在C++规范中可以说分别优于"堆栈"和"堆",因为C++规范不要求使用堆栈/堆模型专门实现分配/取消分配。

除了堆栈和堆之外,是否有任何其他分配/解除分配模型?

分配器(幸运与否)中已经进行了大量研究,具有不同的内存布局,隔离等。 Andrei Alexandrescu撰写了一个关于CppCon 2015的很酷的演示文稿:Andrei Alexandrescu"std::allocator..."。您可能会发现它很有用。

他提供的例子之一可能会阐明一些可能性:

typedef Segregator<4096,
    Segregator<128,
        Freelist<Mallocator, 0, 128>,
        MediumAllocator>,
    Mallocator>
Allocator;

分配策略:

  • 如果对象小于 4096B:
    • 如果对象小于 128B,请使用自由列表(批量元素),
    • 否则使用中型分配器(据说适用于中型对象),
  • 否则使用Mallocator(基于malloc)来分配内存块。
因此,根据

对象的类型,您可以使用不同的分配策略(还有一个基于堆栈的分配器可供选择)。

术语意见似乎基于错误的假设。

关于分配方案,很难理解你所说的"堆"是什么意思,但如果你的意思是显式释放动态分配的对象,那么C++从来没有正式要求这样做。当垃圾收集在C++11中获得一些支持时,那是因为它已经是经过验证的技术,例如用于C++03的Boehm垃圾收集器。

C++确实需要并且一直需要一个堆栈,但不需要该堆栈的任何特定实现。通过细粒度的协作多任务处理,我们可能会看到使用基于链表的堆栈的实现。不过,截至 medio 2016 年,我还不知道任何这样的情况。

相关文章: