use*_*020 12 c++ boost variant
boost :: variant似乎是一个操纵异构类型集的强大容器.我想知道它的成本.在内存中,我认为它占用了最大类型的大小加上一个表示哪个()的整数.对于apply_visitor(),我认为它的性能非常好,它可以直接调用除了很多ifs之外的函数.我的观点是对的吗?
o11*_*11c 12
你几乎是对的.
规模boost::variant是任何元素的最大尺寸,四舍五入为所需的最大对齐,再加上一些整数的大小,并再次围捕.
考虑这些类型的变体,假设标签是uint32_t:
struct foo { uint32_t value[3]; }; // size 12, align 4
struct bar { uint64_t v2; }; // size 8, align 8
Run Code Online (Sandbox Code Playgroud)
未标记的联合必须具有16,对齐8; 添加4字节标记必须达到24,以保持对齐8.
或者考虑以下变体:
struct foo { uint8_t value[5]; }; // size 5, align 1
struct bar { uint16_t v2; }; // size 2, align 2
Run Code Online (Sandbox Code Playgroud)
这些未标记的联合必须具有6,对齐2; 添加4字节标记会强制您调整大小为12,对齐4.
对于调用,我希望它使用函数数组查找(这就是我如何实现我自己的变体,这是必要的,因为boost不支持移动构造函数),因为如果链不能很好地执行并且切换是不可能的.
| 归档时间: |
|
| 查看次数: |
4209 次 |
| 最近记录: |