问题标签 [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 投票
3 回答
8559 浏览

c++ - 带有 boost shared_ptr 的自定义(池)分配器

我希望从池中分配由 shared_ptr 管理的对象,比如 Boost 的 Pool 接口,如何实现?

0 投票
1 回答
426 浏览

c++ - C++ 分配器::deallocate(NULL,1) 允许吗?

两者free(NULL)::operator delete(NULL)允许。分配器概念(例如 std::allocator 是否也允许deallocate(NULL,1),或者是否需要自己保护它?

0 投票
2 回答
42 浏览

com - 检查失败的新

为什么此 ATL/COM 代码会检查分配是否成功?我本来希望通过 CoGetALloc 或一些这样的 api 可以看到自定义分配。符合标准的 C++ 运行时应该抛出 std::bad_alloc,但也许分配器确实已经被替换为非抛出 impl。

0 投票
4 回答
381 浏览

c++ - 如何使对象在内存中的特定位置自行构造?

可能重复:
在特定内存地址创建新的 C++ 对象?

我正在编写本质上是一个对象池分配器,它将分配一个类。我正在分配足够的内存来容纳我需要的对象,并且我正在传递指向内部空间的指针。

现在我的问题是:一旦我在我的池中获得了一个指针,我如何在那里构造一个对象?

0 投票
1 回答
4325 浏览

c++ - 为字符串设置自定义分配器

我知道我可以使用语法为向量设置自定义分配器vector<T, Alloc>。有没有办法对字符串做同样的事情?

0 投票
2 回答
538 浏览

c++ - 如何用实际的源代码替换 stl 的分配器

我需要用它们的原始源代码替换分配器。我正在从 PE 导出表中提取导出的方法,并面对奇怪的冗长分配器,其中 STL 容器在原始源代码中使用。即如果源代码是:

从我得到的导出表中:

如何从上述冗长的分配器中获取其原始源代码的回溯?(typedef 的大小增加得更多。)

问候,

乌斯曼

0 投票
1 回答
529 浏览

c++ - 引用计数对象和多个分配器

这是一个设计问题,假设 C++ 和引用计数对象层次结构。我的代码库中的许多类都派生自一个公共基类 (ObjectBase),它实现了 retain() 和 release() 方法来增加和减少对象实例的引用计数。

可以使用许多用户可定义的内存分配器在堆栈或堆上创建对象的每个实例。如果retainCount 达到0,为了让对象实例在release() 方法中自杀(删除this),实例必须知道它是用哪个分配器构造的。

目前,我正在使用任意分配器为对象实例分配内存,然后调用placement new 来构造对象实例,并在对象上调用 setAllocator() 方法来设置创建它的分配器。如果对象已经在栈上构建,分配器被设置为 NULL 并且 release() 不会调用 delete。这个过程非常多余,并且可能容易出错(内存泄漏,如果我忘记调用 setAllocator 等......)理想情况下,我希望将其设为这样的一步过程:

但这使得支持任意数量的构造函数参数变得非常困难。

我只是在寻找有关如何解决此问题的想法。我真的很喜欢能够引用计数对象而不必依赖智能指针的想法,尤其是因为大多数类都派生自一个公共基础,无论如何。

谢谢你的帮助。

弗洛里安

0 投票
3 回答
2668 浏览

c++ - 带有发布的 std::vector<> 的自定义分配器?

我正在使用 C++ 中设置的第 3 方 C API,该讨论有两种关注方法:

  1. 它相当于 malloc():the_api_malloc(size)(加上匹配的 the_api_free())
  2. 使用 the_api_malloc() 创建的内存返回给该函数的函数,该函数在内部拥有它和 the_api_free() 的所有权:the_api_give_back(ptr)

我创建了一个自定义分配器,包装 the_api_malloc() 和 the_api_free() 以与例如 std::vector 一起使用。这很好用。

我想做的是有一个 std::vector 类型的类,它利用我的自定义分配器,但也有一个 release() 方法,当调用它时,释放它的内存所有权,因此不会调用我的自定义分配器 the_api_free()。

示例用法:

我不确定实现这一目标的最佳方法。我现在做的实验相当讨厌:

有没有更好的办法?

更新1:这是我根据以下建议尝试过的。这也应该有助于说明所需的行为以及当前失败的位置。

更新 2:尝试创建一个 MyOwningAllocator 和一个 MyNonOwningAllocator 然后在“发布时间”从拥有的地方交换到非拥有的地方,但由于它们是不同的类型,所以无法让 swap() 工作。

0 投票
2 回答
1887 浏览

c++ - 是否有一个使用 alloca 并且符合 C++ STL 的分配器?

我有两个问题:

1) 是否可以实现一个分配器,它使用 alloca 在堆栈上分配内存,否则是否符合 C++ STL?

如果那里有代码,您只需将我指向 URL 即可让我高兴。:-) 如果那里没有代码,也许您可​​以绘制函数分配和解除分配?

2)如果上述问题的答案是“是”,我想了解如何在堆栈上为类成员分配内存。例如,考虑一个

并假设调用此向量的成员函数“resize”首先调用分配器的“deallocate”,然后调用“allocate”。

调用 allocate 的范围是成员函数 resize 的范围。这是否意味着在该函数调用结束时从堆栈中删除分配的内存?

亲切的问候,比约恩

0 投票
3 回答
726 浏览

c++ - llvm-gcc std::allocator 错误?

编码:

使用 g++ (4.4.3) 和 llvm-g++ (4.2.1) 编译,但后一个 seg 的输出错误:

这似乎是释放未分配的东西的问题。这是 llvm-gcc 中的错误吗?

更新:根据关于 llvm 邮件列表的讨论,看起来这是一个错误,无论是在 llvm-gcc 还是在新版本中修复的 STL 实现中。但是,我没有费心从他们的存储库中安装和构建 llvm-gcc 来找出答案。