为什么大多数对实现默认不使用压缩(空基优化)?

问题描述 投票:2回答:2

我检查了libcxxeastlboost,它们对都是微不足道的,没有ebco。但是它们所有人也都实现自己的compressed_pair,并在实用程序中使用它,例如unique_ptr(first -> pointer, second -> deleter)。

现在ebco很有用,为什么它们的配对默认不压缩?此优化是否需要权衡?

c++ optimization boost std-pair
2个回答
2
投票

std::pair的实现不能使用std::pair(EBO),因为它包含的对象是成员子对象empty base optimizationfirst,并且EBO仅适用于基类子对象

请注意,second can的实现使用EBO,因为其子对象是通过std::tuple公开的,允许使用基类子对象。


1
投票

约瑟夫·汤姆森回答了问题。

我想补充一点,如果性能很重要,std::tuplestd::get不是您的朋友。这些类定义了构造函数和赋值,即使它们包含琐碎/ POD成员,也使它们成为非普通/非POD类,这排除了标准库中针对普通/ POD类的所有优化。

[如果可能,请定义没有构造器或分配的std::get,以获得最佳性能。这也允许人类可读的名称。 std::pair是您表现最好的朋友。

© www.soinside.com 2019 - 2024. All rights reserved.