【发布时间】:2012-11-11 18:20:50
【问题描述】:
我可以告诉编译器如何优化某些东西或调用什么函数。
我的意思是像创建分配方法并让编译器优化它,因为它使用malloc 或new 优化它。
或者,如果在代码中某处调用了函数 X 并且未使用它的返回值,则删除此调用。 (来自.lib 的函数,编译器对此一无所知)
有这方面的选择吗?
例如:
auto val=X(); //Use the return value
X(); //Don't use
auto t=allocate<T>(); //Allocate on heap
t->Show(val); //Run single function and don't use it's pointer somewhere (Save it after the function is exit)
并将其优化为:
X(); //First line, just call it
T().Show(val); //Combines third and fourth lines, Allocate on stack and run the single function
如果您问“为什么需要这个?”我正在使用自己的 GC 和堆创建编程语言。 (还有很多东西)
它转换为 C++,然后我不想在翻译时优化代码。 (会很痛的) 因为我可以在一些地方随机调用函数。 (我无法检测它们的值是否被使用)
【问题讨论】:
-
您正在设计的语言是 1) 静态编译语言 2) 即时语言,还是 3) 解释语言?
-
“.lib 中编译器不知道的函数”如果编译器不知道函数没有任何副作用,则无法对其进行优化(或者更确切地说,这样做是错误的)。我想提一下,C++ 并不是一个非常好的编译目标。
-
@NickODell 解释。 (Somhow C# to C++)
-
@YanaiBugu 如果您可以生成代码来告诉编译器丢弃下一行,您可以自己丢弃下一行。
-
所以它实际上是一种编译语言。这更有意义。
标签: c++ optimization compiler-construction