我正在使用 C++ 组件在 Node.js 中制作游戏。这个 C++ 组件经常被调用(作为一个子进程)并且是一个瓶颈。因此,我将其资产硬编码为 const 数组以使其运行得更快。
但是,我注意到我的 C++ 代码需要很长时间才能编译。以下是问题的演示:
#include <iostream>
#include <vector>
#define d 3,
#define _ 999,
// an array holding some game assets
const std::vector<std::vector<std::vector<int>>> STRUCTURES {
{ // you should make 80 copies of this paragraph before benchmarking
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ d d d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ d d d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ d d d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ d d d d d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ d d d d d d d _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
{ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ },
},
};
int main(int argc, char **argv){
// prevent optimizer from ignoring the big array
std::cout << STRUCTURES.size() << std::endl;
return 0;
}
如果将中间段落重复 80 次,它的大小将与我的 C++ 程序相当。我用g++ test.cpp -O3
它编译,编译需要 36 秒。我不明白为什么这么慢。有什么我可以改变的,让它编译得更快吗?