gpt4 book ai didi

c++ - std::tuple sizeof,是不是错过了优化?

转载 作者:行者123 更新时间:2023-12-01 19:18:26 25 4
gpt4 key购买 nike

我已经检查了所有主要编译器,并且 sizeof(std::tuple<int, char, int, char>)全部都是 16。大概他们只是将元素按顺序放入元组中,因此由于对齐而浪费了一些空间。

如果元组内部存储元素,例如:int, int, char, char ,那么它的 sizeof 可能是 12。

实现是否可以做到这一点,或者标准中的某些规则禁止这样做?

最佳答案

std::tuple sizeof, is it a missed optimization?

是的。

Is it possible for an implementation to do this[?]

是的。

[Is] it forbidden by some rule in the standard?

不!

通读[tuple] ,对于按模板参数顺序存储成员的实现没有任何限制。

事实上,我能找到的每一段似乎都竭尽全力避免提及成员声明顺序:get<N>()用于操作语义的描述。其他措辞是用“元素”而不是“成员”来表述,这似乎是一个刻意的抽象。

事实上,some implementations do apparently store the members in reverse order至少,可能只是由于它们递归地使用继承来解压模板参数的方式(并且因为如上所述,它们被允许这样做)。

不过,具体来说您假设的优化,我不知道有任何实现不会按照用户给定的顺序[一些微不足道的功能]存储元素;我猜想提出这样的订单并为 std::get 提供机器会很“困难”。 ,至少与您这样做所获得的 yield 相比。如果您确实关心填充,那么您当然可以仔细选择元素顺序以避免它(在某些给定平台上),就像使用类一样(无需深入研究“打包”属性的世界)。 (“打包”元组可能是一个有趣的提议......)

关于c++ - std::tuple sizeof,是不是错过了优化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com