我正在编写一种现在编译为C的语言,当我说IL时,我的意思是在C语言中我编写代码然后由另一个c编译器生成汇编,例如gcc或clang。
我生成的C代码对以下内容更有益:
哪种联系在一起形成以下问题......
答案 0 :(得分:0)
一般来说,进行窥视孔类型优化没什么意义,因为C编译器只会为你做这些。昂贵的是a)浪费或不必要的“礼品包装”操作,b)内存访问,c)分支错误预测。
对于a),确保你没有过多地传递数据,因为虽然C会进行持续传播,但是它可以检测到两个缓冲区实际上是同一底层数据的别名的限制。对于b)尝试保持函数简短和对相同数据的操作,还限制堆内存使用以提高缓存性能。对于c),编译器理解for循环,它不理解goto循环。所以它会认为
for(i=0;i<N;i++)
通常会采用循环体,它不会想到
if(++i < N) goto do_loop_again
通常会跳跃。
所以真正的规则是让你的自动代码尽可能像人一样。虽然如果它太像人一样,那就提出了你的语言提供的问题,而C却没有 - 非C语言的全部意义在于在C源代码中创建一个意大利面,这是一个很好的结构。输入脚本。