首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除了堆栈和堆模型之外,还为C++实现了哪些形式的自动和动态存储?

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

Stack Overflow用户
提问于 2016-06-06 19:37:09
回答 2查看 102关注 0票数 0

因为C++规范不要求具体使用堆栈/堆模型来实现分配/释放,所以在C++规范中,术语“自动”和“动态”存储分别比“栈”和“堆”更可取。

除了堆栈和堆之外,是否还有其他可供选择的分配/释放模型?

EN

回答 2

Stack Overflow用户

发布于 2016-06-06 19:59:49

有很多关于分配器的研究(幸运与否),有不同的内存布局,隔离等。Andrei Alexandrescu写了一个关于这些CppCon 2015: Andrei Alexandrescu “std::allocator...”的很酷的演示文稿。你可能会发现它很有用。

他提供的一个例子可能会揭示一些可能性:

代码语言:javascript
复制
typedef Segregator<4096,
    Segregator<128,
        Freelist<Mallocator, 0, 128>,
        MediumAllocator>,
    Mallocator>
Allocator;

分配策略:

如果object小于4096B,则使用;如果object小于128B,则使用

  • ;如果object小于128B,则使用Freelist (元素批次);如果object小于4096B,则使用
  • ;否则,使用MediumAllocator (假定适用于中等大小的对象)、for

  • 否则使用错误定位器(基于malloc)来分配内存块。

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

票数 1
EN

Stack Overflow用户

发布于 2016-06-06 19:47:28

术语观点似乎是基于错误的假设。

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

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

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

https://stackoverflow.com/questions/37656427

复制
相关文章

相似问题

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