主题的晦涩 人生的短暂

kongjun18's Github chart

C/C++ 的严格别名规则

C/C++ 中的变量占有一块内存,这时这个变量就是这块内存的别名,指针也可以指向内存,因此同一块内存可能会有多个别名。 int main() { int i = 0; int *ip = &i; }其中i和ip是同一块内存,都是它的别名。 内存别名的存在会影响编译器生成的代码的行为。 考虑以下代码块(来自 CSAPP 5.1 节): void twiddle1(long *xp, long *yp) { *xp += *yp; *xp += yp; } void tiwddle2(long *xp, long *yp) { *xp *= 2 * *yp; }这两个函数的功能看起来是相同的,但其实不然。加入,xp和yp指向

GNU C 内联汇编

GNU C 允许在 C 代码中嵌入汇编代码,这种特性被称为内联汇编。使用内联汇编可以同时发挥 C 和汇编的强大能力。 本文介绍 GCC 的内联汇编拓展,Clang 编译器兼容大部分 GCC 语言拓展,因此 GNU C 的内联汇编特性大部分在 Clang 中工作正常。 本文实验环境如下: Linux Friday 5.8.17-300.fc33.x86_64 #1 SMP Thu Oct 29 15:55:40 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux gcc (GCC) 10.2.1 20201016 (Red Hat 10.2.1-6)使用 64 位 AT&T 风格 x86 汇编,为了和编译器自动生成的注释区分开,我添加的注释使用#
0%