除了堆栈和堆模型之外,还为C++实现了哪些其他形式的自动和动态存储
What other forms of automatic and dynamic storage have been implemented for C++ other than the stack and heap model?
术语"自动"和"动态"存储在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 年,我还不知道任何这样的情况。
相关文章:
- MOVNTI 存储是否相对于由同一线程创建的其他 MOVNTI 存储重新排序?
- 当我尝试将范围值存储为 8 位的固定宽度整数时,它向我显示一些其他值 [ASCII]
- 使用字节向量作为其他类型的原始存储是一种好的做法吗
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- 将十六进制字符数组存储在字节数组中,而无需更改为 ASCII 或其他任何东西
- 在存储库中,筛选器函数返回动态向量或其他存储库
- 可以使用QSettings或其他类在每次启动时存储一些设置(但在启动之间重置)吗?
- 为什么数据中的随机部分替换了曾经存储在我的角色数组中的其他数据
- 如何使一个线程中的内存存储"promptly"在其他线程中可见?
- 如何使用二维数组来计算和存储来自其他数组的值的频率
- 除了堆栈和堆模型之外,还为C++实现了哪些其他形式的自动和动态存储
- 在函数内部创建一个局部向量,然后将其作为引用传递给其他函数,这些函数将其存储为引用
- 创建一个伪元组,一个存储在其他地方的数据的前端
- 如何从存储在任何其他结构中的文件中读取C ++中的数据,例如:.text文件
- "函数将查找并存储在参数中,其他两个参数的总和"是什么意思?
- 将迭代器存储在临时容器上,然后从其他容器中删除它们
- 存储有关文件的其他元数据
- 如何将路径存储在这种结构中,以及如何将其转换为其他内容
- 局部变量和其他变量类型的地址存储在哪里
- 如何存储需要随机选择和删除的数据,矢量,哈希表或其他