我的代码中的中心函数看起来像这样(其他一切都是vanilla输入和输出):
-O0
为了这个问题的目的,假设对这些40000行(或非常相似)进行硬编码是非常必要的。所有这些行只包含具有固定数字和-O0
条目的基本算术运算(平均每行40个);没有调用任何函数。源的总大小为14MB。
尝试编译此代码时,编译器会面临大量内存使用。我可以让Clang用-O1
编译它(只需要20秒),但我没有使用GCC(即使是y[0]
)或y[1]
。
虽然在代码端或全局范围内(即通过以另一种顺序计算各个行)几乎没有可以优化的东西,但我相信编译器会找到一些在本地范围内优化的东西(例如,计算计算{{1}}和{{1}})所需的括号内的术语。
我的问题是:
答案 0 :(得分:1)
The following comment解决了这个问题:
我怀疑你遇到的限制是单个堆栈帧/块/功能所需的结构大小。尝试将其分解为100个100行的功能,看看它是否更好。
当使用每行100行的函数(并连续调用所有函数)时,我获得了一个程序,我可以使用-O2
编译而没有任何问题。
答案 1 :(得分:0)
您可以add swap space尽可能多地让编译器在启用优化的情况下编译代码。使用这种技术,编译过程将变得更慢。但是,编译器可用的内存量仅受虚拟地址空间大小的限制。另一个不太方便的选择是安装更多RAM。还要确保运行编译器的进程对其可以分配的内存量没有限制。关于编译器标志,我不认为有标志可以用来直接控制编译器的内存使用情况,让编译器将自己调整到指定的限制。
答案 2 :(得分:-1)
将它写在汇编中。
我假设您有一个生成此C文件的工具。为什么不吐出汇编代码?