前言:
kill_dependency没啥用,本篇可以一扫而过
1、标准描述:
Thekill_dependencymacro serves to terminate a dependency chain.
2、定义
2.1、在gcc中的定义
#define kill_dependency(Y) \ __extension__ \ ({ \ __auto_type __kill_dependency_tmp = (Y); \ __kill_dependency_tmp; \ })2.2、在clang中的定义
#define kill_dependency(y) (y)3、汇编代码分析
3.1、与赋值操作(=)结果一致
gcc -S 编译如下代码获得汇编代码
_Atomic int a = ATOMIC_VAR_INIT(1), b; //如下两句代码汇编代码基本一致 b = kill_dependency(a); b = (a);上述代码汇编表明,在对原子变量a和b进行操作时,使用kill_dependency宏与直接赋值操作(=)所得到的结果是相同的。
3.2、与普通变量赋值进行比较
gcc -S 编译如下代码获得汇编代码
int aa = 1, bb; bb = aa;通过查看汇编,对原子变量进行赋值操作(kill_dependency)时,在x86_64系统中使用了mfence指令;在arm64系统中使用了ldar/stlr指令。这些指令用于内存屏障及内存操作的顺序性。
4、小结
4.1、kill_dependency宏在实际应用中基本未被广泛使用,在kernel、gcc、glibc、bionic以及systemd等项目中均未发现其使用痕迹。
4.2、在大多数情况下,直接使用赋值操作(=)就能够满足需求,无需额外使用kill_dependency宏。