【发布时间】:2018-06-07 17:18:19
【问题描述】:
使用g++ 4.2.1编译,就这么简单的代码,为什么会出现这样的代码
int a[1000000000] = {0};
int main()
{
return 0;
}
编译时间比这个要长
int a[10] = {0};
int main()
{
return 0;
}
如果在 C++ 中没有在编译时构造数组?
另外,我看到了这段代码:
int a[1000000000];
int main()
{
return 0;
}
(不带={0}) 编译时间不长,快如int a[10] = {0}
【问题讨论】:
-
你认为
a分配在哪里?你认为它是什么时候创建的?你认为它对可执行文件大小有影响吗?你测试过这个吗?提示:您正在声明一个非常大的静态分配变量。这与您动态分配的int a*大不相同。 -
@tadman 我刚刚编辑了这个问题,检查即使有一个大数组,没有 ={0} 编译速度也很快
-
没有
= {0};你的编译器可能会优化它,因为它没有被使用...... -
没有
={0}不需要初始化代码。取决于编译器如何初始化该数组,例如它是否在可执行文件中创建了一个 1000000000 数组并花费了合理的时间来编写这个庞大的文件? -
我在 clang++ 3.4-1(Linux,X64,使用 -O0 标志)上观察到了很大的时间差异:编译第一个版本的程序需要 0.1 秒(生成一个 7KB 的可执行文件)和 3 秒(生成一个 9KB 的可执行文件)在我的机器上编译第二个。
标签: c++ arrays compilation global-variables