Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::分配器接口的修订版是否计划用于未来的C++;版本?_C++_C++20_Allocator_C++ Concepts_C++23 - Fatal编程技术网

C++ std::分配器接口的修订版是否计划用于未来的C++;版本?

C++ std::分配器接口的修订版是否计划用于未来的C++;版本?,c++,c++20,allocator,c++-concepts,c++23,C++,C++20,Allocator,C++ Concepts,C++23,在Andrei中,Alexandrescu概述了std::allocator接口的一些暴行,并简要强调了它实际上与分配无关,并提出了对这些分配器的另一种思考方式,这将使它们更具可用性和模块化。或者,引用描述: 分配器有一个不光彩的过去,阴暗的现在和不愉快的未来。STL引入了分配器,作为20世纪90年代过时的分段内存模型的权宜之计。他们的设计是有限的,在很多方面甚至没有帮助分配那么多。因为分配者在那里,他们只是继续在那里,直到他们无法根除或工作,尽管社区付出了巨大的努力 本讲座讨论了根据第一原理创

在Andrei中,Alexandrescu概述了std::allocator接口的一些暴行,并简要强调了它实际上与分配无关,并提出了对这些分配器的另一种思考方式,这将使它们更具可用性和模块化。或者,引用描述:

分配器有一个不光彩的过去,阴暗的现在和不愉快的未来。STL引入了分配器,作为20世纪90年代过时的分段内存模型的权宜之计。他们的设计是有限的,在很多方面甚至没有帮助分配那么多。因为分配者在那里,他们只是继续在那里,直到他们无法根除或工作,尽管社区付出了巨大的努力

本讲座讨论了根据第一原理创建的内存分配器的完整设计。它是通用的、组件化的、可组合的,用于支持特定于应用程序的分配模式

他反对当前std::分配器的主要观点包含在视频的第二部分中,但总结如下:

  • 分配器不应该关心被分配的类型,只关心大小和对齐方式
  • 分配器不应负责存储有关分配的大小信息,分配和解除分配应对称(分别)返回和接收
    Blk
    (ptr,大小)
  • Rebind::other
    很糟糕(他没有进一步详细说明)
  • 分配器不应该是无状态的(因为它们实际上给了您一些内存,它们怎么可能是无状态的?)
  • 应该围绕组合的概念定义分配器;如果你看一下现实世界中的分配器,它们都是由有条件运行的小型分配器组成的
  • 自从我看了那次演讲后,我就一直期待着从中得到某种建议,因为这个想法似乎是那么的合理和实用。在过去,我不得不使用std::allocator,当我的屏幕在候选函数“不可行”中向我尖叫时,它让我第一次理解了C++20概念的必要性


    但似乎什么也没有从中得到?当时我不在,但似乎STL2正在进行中,但后来已经停止了。是否已确定概念至少足以调解std::allocator的症状(如果是,在何处/何时?),或者这是一个向后兼容性问题?在未来的C++版本的路线图上有一些与此相关的吗?

    < P>没有关于重新分配分配器模型的建议。这基本上有两个原因

    C++容器库依赖于以某种方式工作的分配器,并且使容器能够使用这两种分配器都是极端复杂的。所以,如果你想要一个新的分配器模型,你也在谈论一组新的容器,这是一个巨大的蠕虫罐头,委员会在打开时阻止了它

    现在,分配器创建和使用中的大多数缺陷都是可以避免的。即使在C++17中编写分配器也不是一个挑战。你不需要了解事情的血淋淋的细节;您只需要实现几个函数和几个成员别名<代码>标准::分配器为您填充大部分空白


    一天结束时,在C++语言和库中有一些明显的缺陷,它比分配器模型更重要,它比严格的使用更难使用。

    你能详细说明它不是分配和你想要它看起来什么样子吗?它包含在STL的最初原因显然是为了解决这个问题。近/远指针:谈话的最后部分强调了std::allocator的主要问题,其余部分概述了一种新的设计。他基本上建议使用小型可组合的预定义分配器,如“Segator”、“stackallocator”、“nullallocator”、“fallbackallocator”,并使用组合为某个应用程序构建一个复杂的自定义分配器。实际上,稍晚一点会给出更好的总结。我不想看太长的演示文稿。你能总结一下当前分配器接口的问题吗?@SergeBallesta I用一个简短的总结更新了这个问题。不过我还是建议你找个时间看看,对我来说,这部电影很有见地!委员会中关于这个问题的讨论有没有记录在案?@AdriaanJacobs:从来没有关于这个问题的提案,所以委员会没有什么可以讨论的。我在解释为什么这样的事情从来没有被提出过,也很可能不会被接受。我想,因为你说委员会在打开这个巨大的蠕虫罐头时犹豫不决,这是因为你读到了一些东西。另外,您不认为Andrei建议的一个子集可以在当前的std::allocator接口下实现吗?预定义满足分配器要求的两个类,并且像Andrei建议的那样是模块化的?