gpt4 book ai didi

c - C 中 int 数组的初始值 - 为什么?

转载 作者:太空狗 更新时间:2023-10-29 15:46:32 25 4
gpt4 key购买 nike

为什么是值

int array[10];

在函数中声明时未定义,声明为 static 时为 0

我一直在看this question的答案很明显

[the expression int array[10];] in a function means: take the ownership of 10-int-size area of memory without doing any initialization. If the array is declared as a global one or as static in a function, then all elements are initialized to zero if they aren't initialized already.

问题:为什么会出现这种行为?编译器程序员是否决定(出于特定原因)?所使用的特定编译器能否以不同的方式执行操作?

我为什么问这个问题:我问这个问题是因为我想让我的代码在架构/编译器之间可移植。为了确保这一点,我知道我总是可以初始化声明的数组。但这意味着我将浪费宝贵的时间只为这次手术。那么,哪个是正确的决定?

最佳答案

自动 int array[10]; 不会隐式归零,因为归零需要时间,而且您可能不需要将其归零。此外,您不仅要支付一次费用,而且每次控制运行经过初始化变量时都要支付费用。

静态/全局 int array[10]; 隐式归零,因为静态/全局是在加载时分配的。内存将从操作系统中刷新,如果操作系统完全具有安全意识,内存将已经清零。否则加载代码(操作系统或动态链接器)将不得不将它们置零(因为 C 标准需要它),但它应该能够在一次调用 memset 中为所有全局变量/statics,这比一次将每个静态/全局变量归零更有效。

这个初始化只做一次。即使函数内部的 static 也只初始化一次,即使它们有非零初始化器(例如,static int x = 42;)。这就是为什么 C 要求初始化器a static 是常量表达式)。

由于所有全局变量/静态变量的加载时间归零是操作系统保证的或可有效实现的,因此它也可能是标准保证的,从而使程序员的工作更轻松。

关于c - C 中 int 数组的初始值 - 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56871827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com