问题标签 [allocator]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么 C++ 中的分配器需要复制构造函数?
这里说是因为异常规范。我不明白。这个问题与异常规范有什么关系吗?
c++ - 为什么 c++ 中的分配器为 void 类型提供专门化
我注意到 c++ 中的分配器为类型 void 提供了专门化。这样做有什么特殊目的吗?为 void 类型分配内存没有意义,对吧?
visual-c++ - C++0x 分配器
我观察到我的 MSVC10 副本带有似乎允许基于状态的分配器的容器,并编写了一个简单的池分配器,为特定类型分配池。但是,我发现如果_ITERATOR_DEBUG_LEVEL != 0
MSVC 向量从传递的分配器创建一个代理分配器(用于迭代器跟踪?),使用代理,然后让代理超出范围,期望分配的内存保留。这会导致问题,因为我的分配器试图在销毁时释放它的池。这是 C++0x 标准允许的吗?
代码大致是这样的:
c++ - 为什么元组有 uses_allocator 而对却没有?
std::scoped_allocator_adaptor
到目前为止,在使用 gcc 4.7.0 中实现的 C++11 进行试验时,我注意到 C++11 FDIS 定义了std::uses_allocator
元组 ( 20.4.2.8[tuple.traits]
) 的特化,但不用于对,尽管对于所有其他目的,对的外观和行为就像元组一样(它们有 , 等的特化std::get
)std::tuple_size
。
在进一步阅读中,介绍了这些内容的N2554allocator_arg
还定义了对的构造函数和特uses_allocator
化(第 23-24 页)。
为什么他们被丢弃成对?是否有另一种我看不到的使用它们的方法,或者这是暗示不赞成使用对以支持元组?
我的测试代码是:
c++ - boost::unordered_map 使用 boost::interprocess::cached_node_allocator 编译失败
我正在尝试在 boost::interprocess::managed_shared_memory 段中创建一个 boost::unordered_map。这工作正常,直到我尝试从使用 boost::interprocess::allocator 更改为 boost::interprocess::cached_node_allocator。
似乎 hash_bucket 结构推迟了密钥大小的计算,但 cached_node_allocator 在编译时需要大小。关于如何使这项工作的任何想法?
示例代码:
海合会输出:
c++ - 使用 typedefs 从分配器创建 shared_ptr?
我有一些代码,我正在改装以直接使用 anallocator
而不是。这段代码的公共接口的一部分不是返回一个 bald 指针,而是一个(由 bald 指针从.operator new
operator delete
shared_ptr
new
我在分配器的公共合同中看到了几个名为pointer
,const_reference
等的 typedef。这个想法不是T *
直接引用类型,我可能会使用pointer
,允许分配器作者插入 C 指针以外的东西。
但是我反过来将普通指针包装在一个智能指针中,它需要一个诚实的 C 指针(我认为。)如果我尝试将我的代码更改为使用分配器的 typedef,我会遇到麻烦吗?我还没有尝试过(因为有一些腿部工作要做只是为了尝试)所以我先问..
编辑:这是我想要更改的一些代码(我第一次没有包括,因为它不是很友好。)
特别是,在表达式的结果上调用的construct
and模板方法当前嵌入了直接使用and 。我希望它改为使用,并将它们切换到放置新/显式销毁,以制作类似destroy
initializer(injector)
new
delete
Allocator
问题是,我应该尝试尊重分配器的 typedef 吗?看起来我应该是,否则我没有正确使用分配器(没关系,从务实的角度讲,几乎所有这些都将具有“无聊”的 typedef 值。)
我当然可以让它返回Allocator::pointer
而不是返回Impl *
,直到我尝试将它推入shared_ptr
. 也许它也在那里工作?那是我的问题。也许比我更熟悉标准的人会说“只要Allocator::pointer
像 a 那样的庸医operator*
并且你注册了一个自定义删除器,你就可以了。”
编辑: @bdonlan 提出了一个很好的观点,即 ashared_ptr
是以什么为模板Allocator::value_type
,而不是什么Allocator::pointer
。相反,它可能在内部持有一个Allocator::value_type *
。这似乎回答了这个问题,除了分配器作者可能选择以这样一种方式实现operator Allocator::value_type *
它们Allocator::pointer
,即使使用转换后的值,它也根据一些具体陈述的语义“一切正常”。
标准是否要求分配器作者这样做?
编辑:见相关。
c++ - C/C++ 自定义分配器内存泄漏
我创建了一个自定义内存分配器,如下所示:
此分配器的目的是共享由不同容器分配的内存,并且仅在所有容器都被删除时才释放它们。因此,我使用boost::shared_ptr
.
但是在 VS2008 中运行它后,我检测到内存泄漏。我不知道为什么。
如果我更改boost::shared_ptr
为MemoryChunks
,内存泄漏就会消失。
c++ - 自定义分配器无法重新绑定到其他类型
全部
我有我的自定义分配器的代码,该代码旨在成为其他分配器的代理,例如能够收集分配统计信息或其他任何东西
当我像下面这样使用这个分配器时
我收到如下错误
为什么会这样?我有重新绑定结构和重新绑定复制构造函数,所以出了什么问题?
提前致谢, 安德烈
c++ - 是否有防止 STL 容器被交换的 C++ 分配器?
有没有人见过调用mlock(2)来防止 STL 容器的内容被交换到磁盘的分配器?
编写这样的分配器只有一个棘手的部分,即通过对要锁定的分配进行聚类来最小化锁定页面的数量。因此,可能应该从修改一些共享内存分配器开始?
c++ - 是否存在不会隐式释放内存的 STL 分配器?
我的 STL 容器中的内存使用量预计是不稳定的——也就是说它会经常收缩和增长。我正在考虑通过为 STL 容器类型声明指定分配器来解决此问题。我知道池分配器旨在处理这种类型的情况,但我担心波动性将超过池的考虑,为了克服它,我必须进行大量测试以确定良好的池指标。
我理想的分配器永远不会隐式释放内存,事实上,如果内存只在分配器销毁时才被释放,那是完全可以接受的。显式释放未使用内存的成员函数会很好,但不是必需的。我知道我所指的听起来像是一个每个对象的分配器,这违反了标准。我宁愿坚持标准,但如果我不能在其中解决这个问题,我会放弃它。
我不太关心初始性能,而更关心平均性能。换句话说,一次分配单个元素还是其中的一个元素池无关紧要,而所述分配是否导致对 new/malloc 的调用更重要。我编写自己的分配器没有问题,但是有谁知道实现这一点的预先存在的分配器?如果它有所作为,这将适用于连续的内存容器(例如向量、双端队列),尽管一个通用的解决方案会很好。