gpt4 book ai didi

c - 为什么 ACCESS_ONCE 如此复杂?

转载 作者:太空狗 更新时间:2023-10-29 17:02:02 27 4
gpt4 key购买 nike

Linux ACCESS_ONCE宏定义如下:

#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))

我明白这是做什么的,但想知道为什么它如此复杂?我的理解是它执行以下操作:

  1. 获取关注变量的地址(创建一个临时指针)
  2. 将其转换为相同类型的可变指针
  3. 取消引用该指针

对于为什么没有以更简单的方式实现这一点的任何想法,请说:

 #define ACCESS_ONCE(x) ((volatile typeof(x))(x))

最佳答案

ACCESS_ONCE 宏用于从已知(或怀疑) volatile 存储位置检索值但不是这样输入的情况。目的是检索存储位置的当前值,以击败优化编译器,否则编译器可能会将值缓存在寄存器中,甚至根本不提供存储位置。

所写的构造通过声明一个指向该位置的适当类型的指针来间接地将“volatile”应用于存储位置。根据 C 标准,这要求对象严格按照抽象机的规则求值

您提议的修改不会将 volatile 应用于存储位置,因此它不会实现此目的。值检索可以进行优化。

顺便说一句,我认为这是达到既定目的的简洁模型。我保留 complex 用于比这更糟糕的事情。

关于c - 为什么 ACCESS_ONCE 如此复杂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22758232/

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