编译一个1000万行代码的c++文件是什么样的体验?

2023-10-18 10:41:40 浏览数 (1)

最近在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分钟,把这个代码编译了出来。因为单文件只能单核编译,所以比较慢。

使用的编译指令如下:

代码语言:javascript复制
clang -c 1000w-code.cpp -Wno-invalid-source-encoding

生成的object文件大小高达1.2GB!

接着,进行链接的步骤,把stdc 库链接进去,生成最终的可执行文件:

代码语言:javascript复制
clang 1000w-code.o -o 1000w-code -lstdc  

然后得到了一个295MB的可执行文件:

笑死,真的经过九九八十一难,才得到了这个文件。我们运行它一下吧:

由于这位up主是用GB2312编码保存的代码,而Linux默认是UTF8,我也没做编码转换,因此中文就显示不出来了。功能就是把输入的字符前后调转一下,笑死,这就是“小而美”的代码吗哈哈哈哈。

下载

编译完的结果在这里下载:(只能在linux上面运行)

链接: https://pan.baidu.com/s/1uVlrjj0xCahhaZFIugjiuw?pwd=ss8s

0 人点赞