T'n*_*n'E 4 c arrays initialization
免责声明:我可能误解了如何创建,分配和初始化数组.如果是这样,请尝试在两行之间阅读.
如果我通过做创建一个数组
int array[15] = {0};
Run Code Online (Sandbox Code Playgroud)
array编译器的所有元素都将元素初始化为0.这是如何通过编译器完成的?编译器是否插入一个循环来迭代分配的内存并将每个元素设置为零?尺寸会影响性能吗?即初始化双倍大小(30)的数组需要更长的时间吗?多久了?双?对数?2的力量?
只是出于好奇而退出.
我假设你在谈论全局变量/数组.
实际上,它不是编译器任务(如果我们谈论的是现代操作系统).编译器只是将此对象标记为零初始化.
然后,链接器将此对象放入部分,该部分应使用零初始化.在ELF中,此部分已命名.bss.通常,此部分没有数据(因为只有零),但它有大小.
然后,当加载程序将程序加载到内存中时,它知道它应该将属于.bsssection的内存清零.
如果我们讨论基于堆栈的(本地)变量,那么编译器只是调用 memset()