gpt4 book ai didi

c++ - 为什么全局变量和静态变量被初始化为其默认值?

转载 作者:行者123 更新时间:2023-11-30 16:59:18 25 4
gpt4 key购买 nike

在 C/C++ 中,为什么全局变量和静态变量会初始化为默认值?

为什么不只留下垃圾值呢?有没有什么特别的原因是什么?

最佳答案

  1. 安全性:单独保留内存会泄漏来自其他进程或内核的信息。

  2. 效率:这些值在初始化为某个值之前是无用的,并且在具有展开循环的 block 中将它们归零会更有效。当系统空闲时,操作系统甚至可以将空闲列表页面归零,而不是当某些客户端或用户正在等待程序启动时。

  3. 可重复性:单独保留这些值会使程序行为不可重复,从而使错误很难发现。

  4. 优雅:如果程序可以从 0 开始,而不必使用默认初始化器使代码变得困惑,那么它会更干净。

人们可能会想知道为什么 auto 存储类确实以垃圾形式开始。答案有两个:

  1. 从某种意义上来说并非如此。每个级别的第一个堆栈帧页面(即添加到堆栈中的每个新页面)确实接收零值。同一堆栈级别的后续函数实例看到的“垃圾”或“未初始化”值实际上是您自己的程序及其库的其他方法实例留下的先前值。

  2. auto(函数局部变量)初始化为任何内容可能会导致二次(或其他)运行时性能损失。一个函数可能不会在任何给定的调用中使用任何或全部大型数组,并且它可能会被调用数千或数百万次。静态变量和全局变量的初始化,OTOH,只需要发生一次。

关于c++ - 为什么全局变量和静态变量被初始化为其默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229095/

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