当静态对象为静态对象时,为什么具有自动存储的对象不为零?

在C语言中,如果未初始化,则具有自动存储的对象将具有不确定的值,而静态对象则不会。标准

如果具有自动存储期限的对象未明确初始化,则其值不确定。如果未明确初始化具有静态或线程存储持续时间的对象,则:

  • 如果具有指针类型,则将其初始化为空指针;
  • 如果具有算术类型,则将其初始化为(正数或无符号)零;
  • 如果是聚合,则根据这些规则(递归)初始化每个成员,并将任何填充初始化为零位;
  • 如果是联合,则根据这些规则(递归地)初始化第一个命名成员,并将任何填充初始化为零位;

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

这背后的原理是什么?

dbush

一句话:效率

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么是具有静态存储期限的临时对象

来自分类Dev

为什么GCC / Clang接受const限定对象作为具有静态存储持续时间的对象的初始化程序?

来自分类Dev

为什么指向类对象的指针的静态向量具有垃圾值?

来自分类Dev

为什么对象实例中的枚举具有静态上下文?

来自分类Java

为什么对服务对象有静态的弱引用?

来自分类Dev

为什么锁对象必须是静态的?

来自分类Dev

具有静态字段的Java测试对象

来自分类Dev

为什么允许在非静态构造函数中为静态只读字段对象定义SendCompletedEventHandler?

来自分类Dev

ActiveRecord :: Relation具有ID为零的对象,为什么不选择其他数据

来自分类Dev

为什么我的班级人数为零?如何确保不同的对象具有不同的地址?

来自分类Java

通过对象“静态形式”调用静态方法吗?为什么?

来自分类Dev

即使将指针分配为NULL,为什么指针的指针对象的大小也不为零?

来自分类Dev

当其他成员可以访问时,为什么不能“静态”访问Kotlin伴侣对象中的对象?

来自分类Dev

使对象成为静态对象(即使它们不必为静态对象)是否有益?

来自分类Dev

静态存储和大型对象

来自分类Java

同步:为什么更希望锁定私有的最终静态对象而不是类的类对象?

来自分类Dev

NSArray具有“可能”为零的对象

来自分类Dev

为什么将静态对象作为参数传递给另一个类的构造函数时为null

来自分类Dev

为什么编译器没有为静态表达式树使用相同的对象引用?

来自分类Dev

std :: cout在具有静态存储期限的对象的构造函数中的用法

来自分类Dev

当TypeNameHandling为Auto时,为什么Json.NET不为根对象包括$ type?

来自分类Java

当使用静态引用创建对象时,为什么在静态块之前执行实例块和默认构造函数?

来自分类Dev

JS,将静态函数从Class设置为可变对象时,这是什么?

来自分类Dev

为什么我收到带有会话参数的错误“对象引用未设置为对象的实例”,并且其不为null?

来自分类Dev

通过静态构造函数创建ALV时的NULL对象引用。为什么?

来自分类Java

为什么在Singleton模式中将对象设为静态?

来自分类Java

为什么允许实例化静态嵌套类对象?

来自分类Java

Java为什么允许使用对象实例访问静态成员

来自分类Java

为什么要使页面对象实例化而不是静态?

Related 相关文章

  1. 1

    什么是具有静态存储期限的临时对象

  2. 2

    为什么GCC / Clang接受const限定对象作为具有静态存储持续时间的对象的初始化程序?

  3. 3

    为什么指向类对象的指针的静态向量具有垃圾值?

  4. 4

    为什么对象实例中的枚举具有静态上下文?

  5. 5

    为什么对服务对象有静态的弱引用?

  6. 6

    为什么锁对象必须是静态的?

  7. 7

    具有静态字段的Java测试对象

  8. 8

    为什么允许在非静态构造函数中为静态只读字段对象定义SendCompletedEventHandler?

  9. 9

    ActiveRecord :: Relation具有ID为零的对象,为什么不选择其他数据

  10. 10

    为什么我的班级人数为零?如何确保不同的对象具有不同的地址?

  11. 11

    通过对象“静态形式”调用静态方法吗?为什么?

  12. 12

    即使将指针分配为NULL,为什么指针的指针对象的大小也不为零?

  13. 13

    当其他成员可以访问时,为什么不能“静态”访问Kotlin伴侣对象中的对象?

  14. 14

    使对象成为静态对象(即使它们不必为静态对象)是否有益?

  15. 15

    静态存储和大型对象

  16. 16

    同步:为什么更希望锁定私有的最终静态对象而不是类的类对象?

  17. 17

    NSArray具有“可能”为零的对象

  18. 18

    为什么将静态对象作为参数传递给另一个类的构造函数时为null

  19. 19

    为什么编译器没有为静态表达式树使用相同的对象引用?

  20. 20

    std :: cout在具有静态存储期限的对象的构造函数中的用法

  21. 21

    当TypeNameHandling为Auto时,为什么Json.NET不为根对象包括$ type?

  22. 22

    当使用静态引用创建对象时,为什么在静态块之前执行实例块和默认构造函数?

  23. 23

    JS,将静态函数从Class设置为可变对象时,这是什么?

  24. 24

    为什么我收到带有会话参数的错误“对象引用未设置为对象的实例”,并且其不为null?

  25. 25

    通过静态构造函数创建ALV时的NULL对象引用。为什么?

  26. 26

    为什么在Singleton模式中将对象设为静态?

  27. 27

    为什么允许实例化静态嵌套类对象?

  28. 28

    Java为什么允许使用对象实例访问静态成员

  29. 29

    为什么要使页面对象实例化而不是静态?

热门标签

归档