关于C作为中间语言的问题

Questions about C as an intermediate language

我现在正在编写一种可以编译为 C 的语言,当我说 IL 时,我的意思是在 C 中是我编写代码然后由另一个 c 编译器生成汇编的语言,例如gcc 或 clang.

我生成的C代码,会不会更有利于:

哪一种link组合起来形成下面的问题...

一般来说,进行窥孔类型优化没有多大意义,因为 C 编译器会简单地为您做这些。昂贵的是 a) 浪费或不必要的 "gift-wrapping" 操作,b) 内存访问,c) 分支预测错误。

对于 a),请确保您没有传递太多数据,因为虽然 C 会不断传播,但它可以检测到两个缓冲区实际上是相同基础数据的别名的程度是有限的.对于 b) 尽量保持函数简短和对相同数据的操作在一起,同时限制堆内存使用以提高缓存性能。对于 c),编译器理解 for 循环,它不理解 goto 循环。所以它会认为

for(i=0;i<N;i++) 

通常会带循环体,它不会计算

if(++i < N) goto do_loop_again 

通常会跳。

所以真正的规则是让你的自动代码尽可能像人一样。尽管如果它太像人类,就会提出一个问题,即您的语言必须提供哪些 C 不能提供的东西——非 C 语言的全部意义在于在 C 源代码中创建一个意大利面条式的 gotos,这是一个很好的结构输入脚本。