繁体   English   中英

来自C ++的中间代码

[英]Intermediate code from C++

我想将C ++程序编译为中间代码。 然后,我想用当前处理器的所有资源编译中间代码。

第一步是使用优化(-O2)编译C ++程序,运行链接器并执行大部分编译过程。 此步骤必须独立于操作系统和体系结构。

第二步是使用处理器的优化和特殊指令(-march = native),为当前计算机的操作系统和处理器编译第一步的结果,而不使用原始源代码。 第二步应该是快速且软件要求最低。

我可以做吗? 怎么做?

编辑
我想这样做,因为我想分发一个独立于平台的程序,它可以使用处理器的所有资源,而不需要原始的源代码,而不是为每个平台和操作系统分发编译。 如果第二步快速而简单,那将是件好事。

相同架构的处理器可能具有不同的功能。 X86处理器可能有SSE1,SSE2或其他,它们可以是32位或64位。 如果我为通用X86编译,它将缺乏SSE优化。 多年以后,处理器将具有新功能,并且需要针对新处理器编译程序。

只是一个建议 - 谷歌clang和LLVM。

你对编译器了解多少? 你似乎将“-O2”视为一些神奇的旗帜。

例如,寄存器分配是典型的优化。 你现在肯定需要有多少寄存器。 没有必要将foo分配给寄存器16,然后在阶段2发现你正在瞄准x86。

那些依赖于体系结构的优化可能非常复杂。 内联主要取决于通话费用,而这又取决于架构。

一旦你进行了“特定于处理器”的优化,事情变得非常棘手。 对于特定于平台的编译器来说,在适当的“级别”生成对象或“中间”代码时真正“通用”是非常困难的:除非它类似于“IL”(中间语言)代码(如C#-IL)对于给定的编译器来说,知道“停止的位置”是非常困难的(因为当目标平台知识存在时,优化会在编译的不同级别发生。)

另一个想法:如何编译为“预处理”源代码,通常使用“ *.i ”扩展名,然后在不同的体系结构上以分布式方式编译?

例如,大多数(所有)C和C ++编译器都支持以下内容:

cc /P MyFile.cpp
gcc -E MyFile.cpp

...每个都生成MyFile.i ,这是预处理文件。 现在该文件已包含所有标头和其他#defines ,您可以将该。 *.i文件在将其分发到其他系统后编译为目标对象文件(或可执行文件)。 (如果您的预处理器宏特定于目标平台,您可能需要变得聪明,但它应该非常直接与您的构建系统相关,构建系统应该生成命令行来执行此预处理。)

这是distcc用于在本地预处理文件的方法,因此远程“构建服务器场”不需要安装任何头文件或其他软件包。 (无论如何配置构建服务器场中的计算机,都可以保证获得相同的构建产品。)

因此,它同样具有集中单个机器的“配置/预处理”的效果,但是以分布式方式提供交叉编译,平台特定编译或构建场支持。

仅供参考 - 我非常喜欢distcc概念,但该特定项目的最后一次更新是在2008年。所以,如果您找到它们,我会对其他类似的工具/产品感兴趣。 (与此同时,我正在编写一个类似的工具。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM