我正在编写一个编译器,我正在寻找优化资源。我正在编译为机器代码,所以运行时的任何事情都是不可能的。
我最近一直在寻找的是更少的代码优化和更多的语义/高级优化。例如:
free(malloc(400)); // should be completely optimized away
即使这些函数是完全内联的,它们最终也可以调用永远不能内联的操作系统内存函数。我希望能够完全消除该语句,而无需在编译器中构建特殊情况规则(毕竟,malloc
它只是另一个函数)。
另一个例子:
string Parenthesize(string str) {
StringBuilder b; // similar to C#'s class of the same name
foreach(str : ["(", str, ")"])
b.Append(str);
return b.Render();
}
在这种情况下,我希望能够将b
' 的容量初始化为str.Length + 2
(足以准确地保存结果,而不会浪费内存)。
老实说,我不知道从哪里开始解决这个问题,所以我希望从某个地方开始。有没有在类似领域做过任何工作?是否有任何编译器在一般意义上实现了类似的东西?