最近在b站看到这么一个视频:《哪位大神来帮我编译一下这1000万行代码?》
看了一下这个视频,它的主要内容就是,自动生成了一个10000万行的if/else语句的代码文件,功能就是把输入的字符前后调转一下,比如输入“1234”,就输出“4321”。
看样子这个up主并不能编译这个代码,因此我想帮他一把(bushi
由于这代码太长了,因此可以想到它需要很多的内存。因此我们在Linux环境下更容易编译这段代码,谁叫windows内存占用高呢?
处理器:AMD R7-4800H
内存:三星DDR4 3200Mhz 64GB
系统:Ubuntu 22.04
up主给出的代码文件的地址:https://wwd.lanzoue.com/itqlr0gvqfih
这是个压缩包,下载下来之后,解压可以看到这个文件占了260MB的空间:
真的是“重量级工程”了。
最开始我尝试使用gcc编译器进行编译,然而,失败了!在预处理阶段,GCC编译器占了64G内存(包括swap分区)之后都没能解决这个代码,这个内存利用效率真的是太垃圾了。
接着,我换成了clang编译器。编译器进程峰值内存占用60.1GB,平均每100万行代码占用6GB。最终经过1小时40分钟,把这个代码编译了出来。因为单文件只能单核编译,所以比较慢。
使用的编译指令如下:
clang -c 1000w-code.cpp -Wno-invalid-source-encoding
生成的object文件大小高达1.2GB!
接着,进行链接的步骤,把stdc++库链接进去,生成最终的可执行文件:
clang 1000w-code.o -o 1000w-code -lstdc++
然后得到了一个295MB的可执行文件:
笑死,真的经过九九八十一难,才得到了这个文件。我们运行它一下吧:
由于这位up主是用GB2312编码保存的代码,而Linux默认是UTF8,我也没做编码转换,因此中文就显示不出来了。功能就是把输入的字符前后调转一下,笑死,这就是“小而美”的代码吗哈哈哈哈。
编译完的结果在这里下载:(只能在linux上面运行)
链接: https://pan.baidu.com/s/1uVlrjj0xCahhaZFIugjiuw?pwd=ss8s