问题标签 [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.

0 投票
4 回答
2915 浏览

c++ - 为什么 C++ 中的分配器需要复制构造函数?

这里说是因为异常规范。我不明白。这个问题与异常规范有什么关系吗?

0 投票
2 回答
971 浏览

c++ - 为什么 c++ 中的分配器为 void 类型提供专门化

我注意到 c++ 中的分配器为类型 void 提供了专门化。这样做有什么特殊目的吗?为 void 类型分配内存没有意义,对吧?

0 投票
1 回答
1053 浏览

visual-c++ - C++0x 分配器

我观察到我的 MSVC10 副本带有似乎允许基于状态的分配器的容器,并编写了一个简单的池分配器,为特定类型分配池。但是,我发现如果_ITERATOR_DEBUG_LEVEL != 0MSVC 向量从传递的分配器创建一个代理分配器(用于迭代器跟踪?),使用代理,然后让代理超出范围,期望分配的内存保留。这会导致问题,因为我的分配器试图在销毁时释放它的池。这是 C++0x 标准允许的吗?

代码大致是这样的:

0 投票
1 回答
784 浏览

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::getstd::tuple_size

在进一步阅读中,介绍了这些内容的N2554allocator_arg还定义了对的构造函数和特uses_allocator化(第 23-24 页)。

为什么他们被丢弃成对?是否有另一种我看不到的使用它们的方法,或者这是暗示不赞成使用对以支持元组?

我的测试代码是:

0 投票
1 回答
939 浏览

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 在编译时需要大小。关于如何使这项工作的任何想法?

示例代码:

海合会输出:

0 投票
1 回答
247 浏览

c++ - 使用 typedefs 从分配器创建 shared_ptr?

我有一些代码,我正在改装以直接使用 anallocator而不是。这段代码的公共接口的一部分不是返回一个 bald 指针,而是一个(由 bald 指针从.operator newoperator deleteshared_ptrnew

我在分配器的公共合同中看到了几个名为pointer,const_reference等的 typedef。这个想法不是T *直接引用类型,我可能会使用pointer,允许分配器作者插入 C 指针以外的东西。

但是我反过来将普通指针包装在一个智能指针中,它需要一个诚实的 C 指针(我认为。)如果我尝试将我的代码更改为使用分配器的 typedef,我会遇到麻烦吗?我还没有尝试过(因为有一些腿部工作要做只是为了尝试)所以我先问..

编辑:这是我想要更改的一些代码(我第一次没有包括,因为它不是很友好。)

特别是,在表达式的结果上调用的constructand模板方法当前嵌入了直接使用and 。我希望它改为使用,并将它们切换到放置新/显式销毁,以制作类似destroyinitializer(injector)newdeleteAllocator

问题是,我应该尝试尊重分配器的 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,即使使用转换后的值,它也根据一些具体陈述的语义“一切正常”。

标准是否要求分配器作者这样做?

编辑:相关。

0 投票
1 回答
649 浏览

c++ - C/C++ 自定义分配器内存泄漏

我创建了一个自定义内存分配器,如下所示:

此分配器的目的是共享由不同容器分配的内存,并且仅在所有容器都被删除时才释放它们。因此,我使用boost::shared_ptr.

但是在 VS2008 中运行它后,我检测到内存泄漏。我不知道为什么。

如果我更改boost::shared_ptrMemoryChunks,内存泄漏就会消失。

0 投票
1 回答
884 浏览

c++ - 自定义分配器无法重新绑定到其他类型

全部

我有我的自定义分配器的代码,该代码旨在成为其他分配器的代理,例如能够收集分配统计信息或其他任何东西

当我像下面这样使用这个分配器时

我收到如下错误

为什么会这样?我有重新绑定结构和重新绑定复制构造函数,所以出了什么问题?

提前致谢, 安德烈

0 投票
1 回答
257 浏览

c++ - 是否有防止 STL 容器被交换的 C++ 分配器?

有没有人见过调用mlock(2)来防止 STL 容器的内容被交换到磁盘的分配器?

编写这样的分配器只有一个棘手的部分,即通过对要锁定的分配进行聚类来最小化锁定页面的数量。因此,可能应该从修改一些共享内存分配器开始?

0 投票
1 回答
508 浏览

c++ - 是否存在不会隐式释放内存的 STL 分配器?

我的 STL 容器中的内存使用量预计是不稳定的——也就是说它会经常收缩和增长。我正在考虑通过为 STL 容器类型声明指定分配器来解决此问题。我知道池分配器旨在处理这种类型的情况,但我担心波动性将超过池的考虑,为了克服它,我必须进行大量测试以确定良好的池指标。

我理想的分配器永远不会隐式释放内存,事实上,如果内存只在分配器销毁时才被释放,那是完全可以接受的。显式释放未使用内存的成员函数会很好,但不是必需的。我知道我所指的听起来像是一个每个对象的分配器,这违反了标准。我宁愿坚持标准,但如果我不能在其中解决这个问题,我会放弃它。

我不太关心初始性能,而更关心平均性能。换句话说,一次分配单个元素还是其中的一个元素池无关紧要,而所述分配是否导致对 new/malloc 的调用更重要。我编写自己的分配器没有问题,但是有谁知道实现这一点的预先存在的分配器?如果它有所作为,这将适用于连续的内存容器(例如向量、双端队列),尽管一个通用的解决方案会很好。