为什么大多数 pair 实现默认不使用压缩(空基优化)?
Why most implementations of pair don't use compression (empty base optimization) by default?
我检查了libcxx、eastl和boost,它们的对都是琐碎的,没有ebco。但是,它们也都实现了自己的compressed_pair,并在实用程序中使用它,例如unique_ptr(第一个->指针,第二个->删除器(。
既然ebco很有用,为什么它们的对默认情况下不压缩呢?这种优化是否有任何权衡?
std::pair
的实现不能使用空基优化(EBO(,因为它包含的对象是成员子对象、first
和second
,并且EBO仅适用于基类子对象。
请注意,std::tuple
的实现可以使用EBO,因为它的子对象是通过std::get
公开的,这允许使用基类子对象。
我想补充一点,如果性能很重要,std::pair
和std::tuple
不是你的朋友。这些类定义了构造函数和赋值,这些构造函数和赋值使它们成为非平凡/POD类,即使它们包含平凡/POD成员,这也排除了对标准库中平凡/POD类别的所有优化。
如果可能的话,定义一个不带构造函数或赋值的struct
以获得最佳性能。这也允许使用人类可读的名称。零法则是你最好的表现朋友。
相关文章:
- 空基优化子对象的地址
- C++中高效的大型稀疏块压缩线性方程
- 嵌入方指针压缩已禁用
- C++使用整数的压缩数组初始化对象
- 在C++中将函数压缩为两种方式
- 关闭||运算符优化
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 返回值优化:显式移动还是隐式
- 在C++中使用LZ4压缩目录
- 人脸跟踪arduino代码的优化
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 使用C++进行运行长度解压缩
- 纯函数,为什么没有优化
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- 如何以优化的方式同时迭代两个间距不相等的数组
- 小字符串优化(调试与发布模式)
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- C++ 如何将数组值解压缩为函数参数
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 浮点定向舍入和优化