gpt4 book ai didi

c++ - 将__attribute __((const))放在可以访问全局内存的函数上也完全取决于输入的函数是否正确/值得?

转载 作者:行者123 更新时间:2023-12-02 10:00:01 28 4
gpt4 key购买 nike

用例如下:
我有一张 map ,其中将插入一些键/值。
该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。
因为查询的结果完全是输入的函数,所以在查询方法上放置属性((const))是否正确?
如果这不会破坏事情,那么使用A)在编译时知道值的键和B)在编译时不知道值的键是否会对性能产生任何好处?
谢谢!

最佳答案

从形式上来说,这是不正确的。进行全程序优化的编译器可以将查询调用一直提升到main的顶部。我实际上遇到了与__attribute__((__const__))上的__errno_location()类似的东西,在libc / dynamic-linker启动代码之前(因此在设置线程本地存储之前),编译器取消了对errno地址的计算(因为后来无条件使用了它)。 (我后来通过使用硬屏障将初始化阶段分开,以不允许从一个阶段升至另一个阶段的方式解决了这一问题,但这种解决方案实际上仅适用于系统级编程,不适用于应用程序。)
关于是否可以摆脱它,也许。如果您知道您将不会使用LTO或整个程序编译,或者您可以在执行查询的代码和构成表的代码之间放置某种volatile地址间接调用屏障,则可能会结束在实践中还可以。您可能要考虑的另一种选择是是否可以使表静态初始化,以便查找调用随时有效。

关于c++ - 将__attribute __((const))放在可以访问全局内存的函数上也完全取决于输入的函数是否正确/值得?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63080257/

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