gpt4 book ai didi

c - 函数内的静态变量

转载 作者:行者123 更新时间:2023-12-02 08:09:46 24 4
gpt4 key购买 nike

这更像是一个理论问题。假设我有以下 C 程序:

int a;
int f(){
double b;
static float c;
}

题目是这样写的:对于每个变量(a,b,c),命名如下:存储持续时间(lifetime),标识符的范围,它所在的内存段和它的初始值。

据我目前理解的理论:

对于变量a:

生命周期:静态

标识符范围:文件级范围

内存段:数据段

初始值:0

对于变量b:

生命周期:自动(本地)

作用域级别: block 级作用域

内存段:栈

初始值:未定义(随机)

但是让我困惑的是变量 C。据我了解它的生命周期是静态的,它的范围级别是 block 级范围,但我不确定内存段或初始值。

通常,函数的局部变量保存在堆栈段中,但既然变量是静态的,那么它是否应该保存在数据段中呢?

最佳答案

通常你不需要处理像“段”这样的概念,它取决于文件格式(ELF、Mach-O等)。

一个静态变量,无论在哪里定义,它们的生存期和初始化规则都是一样的。唯一的区别是这个符号对编译器和链接器的可见性。在您的特定示例中,static float c 也是零初始化的,就像 int a 一样。

从技术上讲,如果您处理的是 linux 和 ELF 格式,则没有显式初始化的静态变量将放在 .bss 段中,而不是 .data 段中。 .bss段在文件中没有物理大小,但会在ELF文件加载执行时被零初始化。

如果您有兴趣,可以使用nm 命令查看文件中的符号。

关于c - 函数内的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48357516/

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