c++ - C++:编译全局数组的时间
问题描述
使用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}一样快
解决方案
你的证据在哪里?详细信息在哪里(例如您正在使用的编译器)?您是仅在其他内容中使用此代码还是此代码?你做了多少次运行来确定这一点?
为了得到答案:唯一可以忽略的性能差异将是解析代码 - 因为示例中会有更多符号int a[100000000] = {0};
。
查看生成的程序集将提供变量如何分配的答案gcc -c -S main.c
:
.file "main.c"
.globl a
.bss
.align 32
.type a, @object
.size a, 4000000000
a:
.zero 4000000000
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 7.2.1 20170915 (Red Hat 7.2.1-2)"
.section .note.GNU-stack,"",@progbits
和:
.file "main.c"
.globl a
.bss
.align 32
.type a, @object
.size a, 40
a:
.zero 40
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
movl $0, %eax
popq %rbp
.cfi_def_cfa 7, 8
ret
.cfi_endproc
.LFE0:
.size main, .-main
.ident "GCC: (GNU) 7.2.1 20170915 (Red Hat 7.2.1-2)"
.section .note.GNU-stack,"",@progbits
推荐阅读
- mysql - MySQL的连接查询计数非常慢
- discord.py - 如何存入所有钱 discord.py
- javascript - 需要帮助修复 JavaScript 中的不明显错误
- python - 删除 Python 文本文件中的空白/空行
- fortran - 为什么计算两个变量的乘积符号使用绝对值?
- ruby-on-rails - 安装 rdiscount (2.2.0.1) 时出错,Bundler 无法在 Mac OS 和 Ruby 2.7.1 上继续
- actions-on-google - 如何呈现从 webhook 返回的列表
- reactjs - React - 如何调用 web api 来检查用户名是否有效?
- java - 致命异常:Firebase-Messaging-Intent-Handle -- java.lang.NoClassDefFoundError
- opencv - 如何使用 OpenCV 确定灰度图像中给定区域的平均色调?