gpt4 book ai didi

c - 为什么具有自动存储的对象在静态对象时不归零?

转载 作者:行者123 更新时间:2023-12-04 10:51:16 25 4
gpt4 key购买 nike

在C语言中,自动存储的对象如果不初始化就具有不确定的值,而静态对象则没有。来自 the standard :

If an object that has automatic storage duration is not initialized explicitly, its value is indeterminate. If an object that has static or thread storage duration is not initialized explicitly, then:

  • if it has pointer type, it is initialized to a null pointer;
  • if it has arithmetic type, it is initialized to (positive or unsigned) zero;
  • if it is an aggregate, every member is initialized (recursively) according to these rules, and any padding is initialized to zero bits;
  • if it is a union, the first named member is initialized (recursively) according to these rules, and any padding is initialized to zero bits;

我们都知道 C 是一种非常无情的语言,它把所有的责任都交给了程序员,所以这让我有点奇怪为什么他们决定对静态对象进行零初始化。我还想知道为什么当且仅当至少一个元素被手动初始化时,自动数组才完全零初始化。但最让我好奇的是,为什么他们不选择这样做,要么一无所有。

这背后的原理是什么?

最佳答案

一句话:效率

对于静态对象,它们具有完整的程序生命周期,因此它们的初始值是在编译时设置的,这意味着没有运行时成本。对于自动对象,每次进入作用域时都需要对其进行初始化。因此,除非显式初始化它们,否则会浪费处理器周期。

关于数组和结构,一个对象要么被初始化,要么不被初始化。因此,如果它的至少一部分被显式初始化,则其余部分也必须被初始化。据推测,如果编译器不需要跟踪任何部分初始化的内容,那么它可以更轻松地围绕未初始化的变量执行优化。

关于c - 为什么具有自动存储的对象在静态对象时不归零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58404458/

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