问题标签 [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++ - allocator.construct 循环是否等于 std::uninitialized_copy?
在此上下文T
中是某种类型,并且allocator
是该类型的分配器对象。默认情况下是这样,std::allocator<T>
但这不一定是真的。
我有一大块内存由allocator.allocate(n)
. 我还有一个对象容器con
(T
例如 a std::vector<T>
)。我想用对象初始化那块内存T
。
内存块的位置存储在T* data
.
这两个代码示例总是相同吗?
而对于这两个?
c++ - 符合标准的自定义分配器
allocate
将 0 传递给方法时可以抛出异常吗?
谢谢你。
附言
如果 n == 0,则返回值未指定。
这是否意味着不allocate
应该抛出异常?我倾向于认为,如果 n==0 不允许投掷,那么标准会清楚地说明它。
compression - 具有内存压缩的分配器
我想知道,是否有项目/至少有一些关于内存压缩和内存分配器组合的研究(当然以牺牲一些速度为代价)?
例如,想象一下这样的场景:我们必须处理一棵巨大的树。这棵树不适合记忆。使用压缩分配器,我们几乎可以适应任何树。
当然,可以使用迭代方法而不立即构建树,但我的问题纯粹是理论上的(今天)。
可能取消引用需要特殊的宏/模板,以便分配器能够解压缩选定的区域。但是,如果一个区域引用另一个区域等怎么办?一定有一些非常复杂的算法,可能只能在托管语言中解决(但 Boehm 能够为 C++ 制作 GC!)
或者也许它是如此复杂/缓慢(甚至与节省的内存相比)根本不值得?虚拟内存和交换可能非常慢,尤其是在垃圾收集环境中。最近一个 1 gb 的应用程序使整个操作系统无响应......所以内核级机制不一定有效。
你可以把它想象成(我仍然试图向你保证这不是一个非常愚蠢的想法)作为反对快速用户模式 futexes 与慢速本机互斥锁,快速用户模式绿色线程(如在 Erlang 中具有多达 2000 万个同时进程)机器)与较慢的本机线程等。
c++ - 用于扩展任意标准符合分配器的 C++ 设计模式
我目前正在寻找扩展任意标准符合分配器类型的最佳方法。明确一点:我不想编写自定义分配器。我只想将特定的扩展或行为“添加”到已经存在的扩展或行为。我已经创建了一个示例,它的外观如何。请注意,以下代码仅用于说明目的。
请考虑以下注意事项:
- 模板参数 allocator_type 可以是任何标准符合类型。它不限于 std::allocator。这是所有 STL 实现都使用的相同技术。
- 从 allocator_type 派生时,我们需要使用私有继承,因为 std::allocator 成员函数都不是虚拟的。然而, std::allocator& alloc = smart_allocator() 不会做你所期望的。
你认为这适用吗?
c++ - C++ Design Pattern for allocator type arguments
The C++03 standard library uses simple template type arguments when passing a type to a class which is meant to be an allocator. This is possible because of how templates work in C++. However, it isn't very straightforward and you might don't know what exactly the type definition should look like - especially in case of non standard types.
I thought it might be a good idea to use adaptor classes instread. I've created an example to show you what I mean:
The implemention should be obvious. Here's some usage example.
is this an improvement compared to the usual way?
c++ - tr1 的 unordered_map 中的自定义分配器
关于 unordered_map 的自定义分配器,我有一些问题。我有一个大数据集,我需要将字符串作为键进行散列。所以我开始知道提供自定义内存分配器可以优化速度。但是我该怎么做呢?(我检查了 SO,但我找不到任何关于使用自定义分配器的信息,尽管有一些与自定义哈希函数等相关的东西)
还有 unordered_map::size() 返回什么?它说它是最长的受控序列。我对这意味着什么感到困惑。是桶数本身还是其他?
非常感谢
c++ - C++ 默认分配器 - 如果大小不等于传递给分配调用的大小会发生什么?
20.6.9:
- 要求:p 应该是从 allocate() 获得的指针值。n 应等于作为第一个参数传递给返回 p 的 allocate 调用的值。
- 效果:释放 p 引用的存储空间。
- 备注:使用 ::operator delete(void*) (18.6.1),但在调用此函数时未指定。
如果n
不等于作为第一个参数传递给返回的 allocate 调用的值,会发生什么p
?不解除分配?扔std::bad_alloc
?...
编辑: 我对“应该发生什么”的真正意思是:在自定义实现中抛出或断言可以吗?
c++ - STL 容器库 - 在分配器类的不同实例上调用分配/解除分配是否合法?
首先,我认为不是。但是,我在调试模式下观察到 MSVC 10.0 的这种行为。我正在使用一个自定义allocator
类,它依赖于用户仅将分配在同一实例上的指针传递给deallocate
. 但是,在发布模式下,我的代码正在运行。
这是一个错误还是我弄错了?
c++ - 编译器对 STL 容器中的状态分配器的支持
新的 C++11 标准需要 STL 实现来支持容器中的有状态分配器。现在主要的 STL 实现(Visual Studio 2008、2010、libstdc++)是否符合这个要求?我在 MSDN 或 libstdc++ 文档中对此一无所知。