g++ 编译时间是否取决于数组大小
Does g++ compilation time depend on array size?
我有一个C++代码,它有 3 个数组声明。
float A[NUM];
float B[NUM];
float C[NUM];
当我用NUM=512
编译时,编译速度很快
time g++ -DNUM=512 trials trials.cpp -lm
0.16s user 0.04s system 94% cpu 0.219 total
但是,当我使用 NUM=167772160
编译时,需要更多时间。
time g++ -DNUM=167772160 trials trials.cpp -lm
7.90s user 0.69s system 99% cpu 8.604 total
我已经很多年没有使用C++了。我很想知道为什么编译时会有时差,尽管编译后的目标文件大小相同。
这是一个众所周知的难题。在此过程中的某个地方,将分配数组的实际内存
看:与交换空间相关的链接器性能?
看起来,正如我们可能怀疑的那样,看起来 ld 实际上正在尝试匿名映射这个数组的整个静态内存空间(或者可能是整个程序,很难说,因为程序的其余部分太小了,它可能都适合额外的 4096)。
还相关:
- 静态分配程序编译时间长
- 奇怪的海湾合作委员会行为
- GC 中缺少优化:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=4131
您的数组是在本地声明还是全局声明?如果是全局的,因为链接器应该在 .data 部分中分配内存,这可能需要很长时间。但是,如果在本地声明它,因为内存是在运行时分配的,而不是在链接时分配的。这将是链接器的问题,而是由编译器的分析器或优化器引起的问题。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- 在 C++ 中使用平展数组语法,崩溃取决于宽度/高度
- 类模板中的std ::数组的大小,具体取决于模板参数
- C++ 取决于模板类型的数组类型
- 为什么我的二进制大小取决于我的数组的大小
- g++ 编译时间是否取决于数组大小
- 使std:数组大小取决于类模板参数
- 为什么数组的大小不一致取决于它在源代码中的位置