gpt4 book ai didi

c++ - FlatBuffers 是否以某种方式避免了严格的别名?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:02:27 24 4
gpt4 key购买 nike

我最近一直在研究 FlatBuffers 库。我正在寻找评估它以用于我的项目。看着flatbuffers.h ,我想知道是否违反了strict-aliasing rule如果它确实考虑了严格的别名,有人可以解释它是如何做到的吗?

在以前的项目中,我很难学到这个规则,优化会产生难以发现的细微错误。我一直在使用 placement new operator避免使用编译器标志来解决这个问题。

链接:

最佳答案

目前,读取 FlatBuffer 完全是只读的事情,因此编译器可以假设没有指针别名,这应该不会产生任何问题。

写一个 FlatBuffer 可能更棘手,但在这里每 block 内存也只被一个指针触及一次,并且永远不会被读回,除了 EndTable() 中的 vtable 比较(它由 memcmp() 读取。

然后在理论上,如果您首先构建一个 FlatBuffer 然后立即读取它,它可以优化编写和读取代码,并进行 Linus 在您上面的链接中提到的那种“邪恶”优化(假装写作从未发生过)。

代码很干净 w.r.t. -fstrict-aliasing -Wstrict-aliasing=3,但不提供任何保证。

如果您觉得有任何代码特别不安全,或者对如何更好地防止别名问题有任何想法(不是 -fno-strict-aliasing :),我会喜欢听。

关于c++ - FlatBuffers 是否以某种方式避免了严格的别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24330925/

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