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

c++ - 使用不同分配器分配的内存

假设我有一个名为的类,它维护由 Now 分配的vector一些内部动态类型数组,我构造了 a类型,然后想使用移动语义,以便我可以将它消耗的内存用于 a类型,如下所示:Tstd::allocator<T>.vectorUvectorT

ut' 移动构造函数中使用 ' 分配器分配的内存,然后使用t' 分配器释放它对我来说安全吗?如果是这样,我必须做些什么来确保这个操作是安全的?我猜我应该首先使用' 分配器调用' 内部数组allocator.destroy()的每个元素。uu

0 投票
6 回答
1133 浏览

c - 栈和堆的区别

请告诉我关于以下代码的堆栈和堆之间的区别

我知道 arr 是一个静态数组,当我执行 arr[3000] 时,我正在访问其他进程的地址,这会给出 SIGSEGV 错误。但我不明白为什么 a[4000] 不会给我任何运行时错误,即 SIGSEGV 信号。

谢谢

0 投票
1 回答
527 浏览

c++ - 如何从 std::allocator 创建继承,它是否合理?

我想知道的很简单——如果我们创建一个 DLL,用静态运行时编译它,而在它的代码中我们将创建一个从 std::allocator 继承的简单分配器,我们是否有可能让 N 个不同的堆只使用这个库堆(一个带有分配器)用于所有 N 堆的内存管理?以及如何创建这样的分配器?

0 投票
3 回答
830 浏览

c++ - 如何创建一个函数,返回一个向量,使用自定义池分配器(如果提供),但默认为 std::allocator?

在下面的代码中是函数 make_vector()。它创建一个向量并将其返回给调用者。我希望能够为要使用的向量指定一个分配器,但默认情况下使用默认的 std::allocator 。这是因为在某些情况下,我只需要默认分配器,但有时我需要从一些预定义的内存池中分配。

我最接近的是 make_vector2() 函数模板。它适用于 std::allocator,但我不知道如何将“arena”参数传递给我的自定义分配器。

希望这个工作的 c++11 示例能更好地解释它:

在 main() 中,创建了 vec1 以使用 TEXTURES arena 进行分配。要使用的 arena 被传递到分配器的构造函数中。Vec2 由 make_vector2() 模板函数创建并使用 std::allocator。

问:如何定义 make_vector() 函数,以便它可以创建一个使用 std::allocator 或上面的自定义池分配器的向量?

0 投票
2 回答
342 浏览

c++ - 为什么C++11中没有vector(size_type n, const Allocator& alloc)?

在 C++11 中,std::vector 具有vector(size_type n)默认构造n项的构造函数,可以与默认构造的、可移动的、不可复制的类一起使用。

但是,与其他所有向量构造函数不同,没有采用分配器的变体,我采用了以下方法:

有没有更好的方法来实现这一点?vector(size_type n, const Allocator& alloc)标准中省略了具体原因吗?

0 投票
2 回答
127 浏览

c++ - vector: 函数向量( const vector& X ); 只需获取存储数组的地址吗?

如果是这样,我们可以假设数组末尾会有一个空终止符吗?

0 投票
4 回答
861 浏览

c++ - 标准容器作为多线程应用程序中的局部变量

我知道标准库中的容器不是线程安全的。我曾经认为一个容器,比如说 type std::list,不能被多个线程同时访问(其中一些可能会修改容器)。但现在看来,它的意义远不止眼前所见;一些更微妙的东西,一些不那么明显的东西,至少对我来说是这样。

例如,考虑这个按值接受第一个参数的函数

这是线程安全的吗?

起初,它似乎是线程安全的,因为函数体不访问共享的可修改资源,因此是线程安全的。再想一想,当我调用这样一个函数时,std::string将创建一个类型的对象,这是第一个参数,我认为这个对象的构造不是线程安全的,因为它在内部使用std::allocator,我相信不是线程安全的。因此调用这样的函数也不是线程安全的。但如果它是正确的,那么这个呢:

我走对了吗?我们可以在多线程程序中使用std::string(或任何内部使用的容器)吗?std::allocator

我专门将容器称为局部变量,而不是共享对象。

我搜索了谷歌,发现了许多类似的疑问,没有具体的答案。我面临与他类似的问题:

请同时考虑 C++03 和 C++11。

0 投票
4 回答
427 浏览

c++ - 默认分配器是否将 int 归零?

使用 STL 容器时,我不确定默认分配器分配的 int 是否已被归零。以下代码对问题表示“是”:

由于没有任何文件证实这一点,我不敢想当然。

0 投票
1 回答
3947 浏览

c++ - std::map 标准分配器性能与块分配器

我在 C++ 优化食谱上读到 STL 容器的标准分配器,例如 std::list、std::set、std::multi_set、std::map、e std::multi_map 可以被更高性能的块分配器

块分配器具有更高的性能、低碎片和高效的数据缓存。

我在网上找到了声称比标准更快的 FSBAllocator。 http://warp.povusers.org/FSBAllocator/

我已经用 std::map 进行了尝试,发现似乎确实更快,但我的问题是 STL 实现怎么会比特定分配器慢,以及另一个分配器比标准分配器的缺点是什么?便携性和鲁棒性?我的代码必须在各种架构(win32、osx、linux)上编译。有人对这种固定大小的块分配器有经验吗?

0 投票
1 回答
6703 浏览

c++ - 使用 std::allocator_traits