问题标签 [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++ - 在 boost::vector 和 boost::matrix 中动态改变分配策略
在我的新项目中,我正在构建一个数据管理模块。我想为上层提供一个简单的模板存储类型,例如
我的目标是,用一些不同的分配器更改数据分配器,例如 Boost.inter 进程分配器或 Boost.pool 分配器(Boost Ublas 矩阵和向量类将分配器作为模板参数)。并且只提供一个类和工厂方法来创建适当的分配器。虚拟基类可能很甜蜜,但我无法处理如何将它与模板一起使用。你们提供什么样的设计模式或解决方案?
编辑:
我将使用 boost.pool 和 boost.shared_memory_allocator。简而言之,我想拥有具有不同分配策略的不同类。但我的观点是程序的上层部分应该对此一无所知。对我来说真正的挑战是收集不同的模板类相同的基类。
编辑:对于想要将矩阵类与自定义分配器一起使用的人。
是这样的:
c++ - 令人信服的自定义 C++ 分配器示例?
std::allocator
放弃定制解决方案有哪些真正好的理由?您是否遇到过任何对正确性、性能、可扩展性等绝对必要的情况?有什么非常聪明的例子吗?
自定义分配器一直是我不太需要的标准库的一个特性。我只是想知道这里是否有人可以提供一些令人信服的例子来证明他们的存在。
c++ - 带有地图分配器问题的 C++ 模板
我定义了一个从 CSV 文件加载地图的模板函数:
然后我尝试使用它:
但是得到 htis 编译时错误:
似乎我的函数调用引入了一些隐式参数,但我不明白错误以及如何修复它。有任何想法吗?
c++ - 无锁竞技场分配器实现 - 正确吗?
对于一个简单的指针增量分配器(他们有正式名称吗?)我正在寻找一种无锁算法。这似乎微不足道,但我想获得一些反馈,无论我的实施是否正确。
不是线程安全的实现:
我对线程安全实现的尝试:
whereCMPXCHG
是与参数的互锁比较交换(destination, exchangeValue, comparand)
,返回原始值
对我来说看起来不错 - 如果另一个线程在 get-current 和 cmpxchg 之间分配,则循环再次尝试。任何意见?
c++ - 为什么不是 std::string::max_size() == std::string::allocator::max_size()
最近我注意到以下陈述是不正确的std::string s
。
我发现这很有趣,默认情况下std::string
将使用std::allocator<char>
理论限制为size_type(-1)
(是的,我知道我假设是 2 的补码,但这与实际问题无关)。我知道实际的限制会比这个少得多。在典型的 32 位 x86 系统上,内核将占用 2GB(可能是 1GB)的地址空间,而实际上限要小得多。
无论如何,GNU libstdc++std::basic_string<>::max_size()
似乎返回相同的值,而不管它使用的分配器说什么(类似于1073741820
)。
所以问题仍然存在,为什么不std::basic_string<>::max_size()
直接返回get_allocator().max_size()
?在我看来,这是假设的上限。如果分配不足,它只会抛出 a std::bad_alloc
,那么为什么不尝试呢?
这比其他任何事情都更令人好奇,我只是想知道为什么这两者至少在这个实现中是分开定义的。
c++ - 使用自定义分配器的帐户内存使用情况
我正在使用自定义分配器来解决多个容器中的内存使用情况。目前我使用静态变量来说明内存使用情况。我怎样才能在多个容器中分离这个帐户,而不必重写分配器以使用不同的静态变量?
c++ - STLPORT 中可用的分配器,以及如何使用它们
我们正在使用 STLPORT 并且我们想更改 stlport 的默认分配器:而不是 vector<int>,我们想尝试 vector<int, otherallocator>
stlport 中提供了哪些替代分配器,它们有什么特点?我该如何使用它们?
c++ - STL 分配器和运算符 new[]
是否有operator new[]
用作分配器的 STL 实现?在我的编译器上,Foo::operator new[]
私有化并没有阻止我创建一个vector<Foo>
......这种行为有什么保证吗?
c++ - 如何创建具有 64 位索引的 std::vector?
我想创建一个大 std::vector
的所以operator[]
应该接收long long
而不是unsigned int
,我尝试编写自己的分配器:
但是当我尝试以下操作时:
对于第二行和第三行,我收到以下警告:
警告 C4244:“参数”:从“__int64”转换为“无符号整数”,可能丢失数据
我错过了什么?我认为operator[]
size 构造函数的类型和类型应该来自allocator::size_type
.
我正在使用 VS9 (2008)。
optimization - 具有并发分配器的空闲列表
空闲列表是通过重用已分配的现有内存来加速分配的常用方法。有没有办法在并发分配器中使用空闲列表,而不会产生每次分配的锁开销(这将抵消空闲列表的预期性能增益)?