【发布时间】:2023-03-12 13:02:02
【问题描述】:
要使 setjmp/longjmp 工作,您需要将局部变量声明为 volatile。如果有人使用 -O3 编译其代码,那么 volatile 变量对性能的影响有多大。在 x86 多核平台上它会很大还是只有一点点?
在我看来,它只会增加一点点开销,因为该 volatile 变量仍然可以被缓存,并且从缓存中读取/写入无论如何都非常快。意见?
【问题讨论】:
-
这可能会对您的代码造成重大的性能影响吗?如果是,是否有任何东西阻止您在使用和不使用
volatile的情况下测量性能? -
关于这一点,除了您已经表达的观点之外,没有太多可以说的一般性。这在很大程度上取决于架构和使用模式。与相同但非
volatile代码相比,如果有很多加载/存储正在进行,请查看汇编程序。如果您仍然看不清楚,请对其进行基准测试,这是确定的唯一方法。此外,您只需声明那些变量volatile,您需要在longjmp和 访问之前更改这些变量。根据我的经验,gcc 在检测这些情况方面非常出色。 -
克里斯,我是从理论上讲的。