是否有一个位集类在实例化时大小,但避免了 boost::d ynamic_bitset<> 的额外分配调用?
Is there a bitset class that's sized at instantiation time, but avoids boost::dynamic_bitset<>'s extra allocation call?
是否有一个方便的类似std::bitset<>
的实例化时动态大小,但避免boost::dynamic_bitset<>
所需的额外分配
你可以很容易地在C语言中创建动态大小的位集,如:
typedef struct { node_t node; block_t bits[0]; } node_bitset_t;
p = (node_bitset_t *)malloc( (sizeof(node_t) + sizeof(block_t)*blocks) * array_size);
只有在编译时知道bits
时才可以使用std::vector<std::bitset<bits>>
。如果您使用std::vector<boost::dynamic_bitset<>>
,那么您将看到一个额外的分配器调用。是否有一个妥协,实现上述C代码的平衡?
你可能有一些自定义的分配器,例如std::vector<…>在每个boost::dynamic_bitset<>
之后留下一些额外的空间,并在那里分配m_block
,尽管这可能仍然会占用m_block
的指针。
可以使用placement new创建这样的类,但我不知道是否存在这样的类。类不会被直接实例化,而是通过工厂来构建;工厂方法将使用new
来分配所需的字节数,然后使用placement new来初始化缓冲区前端的对象。超过类大小的缓冲区的末尾为位存储空间。
dynamic_bitset
相比,它不会保存任何内容。使用这个方法,您有两个部分,一个指向bits对象的指针和对象本身。使用dynamic_bitset,你有dynamic_bitset对象,它包含指向位的指针。同样的事情。 我在boost中为它创建了一个票证作为特性请求:票证#13016 (https://svn.boost.org/trac/boost/ticket/13016)
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- 超载操作员&lt;&lt; - 必须是二进制操作员
- 没有匹配的“运营商&lt;&lt;”