gpt4 book ai didi

objective-c - local、global、static、auto、register、extern、const 和 volatile 变量存储在哪里?

转载 作者:太空狗 更新时间:2023-10-30 03:09:43 25 4
gpt4 key购买 nike

local、global、static、auto、register、extern、const 和 volatile 变量存储在哪里?

最佳答案

  • local 变量可以存储在堆栈或数据段中,具体取决于它们是自动的还是静态的。 (如果未明确指定 auto 或 static,则假定为 auto)

  • global 变量存储在数据段中(除非编译器可以将它们优化掉,请参阅 const)并且从声明点到编译单元末尾都具有可见性。

  • static 变量存储在数据段中(同样,除非编译器可以优化它们)并且从声明点到封闭范围的末尾都具有可见性。非静态的全局变量在其他编译单元中也是可见的(参见 extern)。

  • auto 变量始终是本地变量,并存储在堆栈中。

  • register 修饰符告诉编译器尽可能将变量保存在寄存器中。否则存储在栈中。

  • extern 变量存储在数据段中。 extern 修饰符告诉编译器不同的编译单元实际上正在声明变量,所以不要创建它的另一个实例,否则在链接时会发生名称冲突。

  • const 变量可以存储在堆栈或只读数据段中,具体取决于它们是自动的还是静态的。但是,如果编译器可以确定它们不能从不同的编译单元引用,或者您的代码没有使用 const 变量的地址,则可以自由优化它(每个引用都可以用常量值替换) .在那种情况下,它不会存储在任何地方。

  • volatile 修饰符告诉编译器变量的值可能随时因外部影响(通常是硬件)而改变,因此它不应该尝试优化从内存到在引用该变量时注册。这意味着静态存储。

顺便说一句,所有这些都适用于 C 和 C++ 以及 Objective-C。

关于objective-c - local、global、static、auto、register、extern、const 和 volatile 变量存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684760/

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