根据参考资料,其中许多内容都表示存储在数据段中。这意味着如果我在另外两个函数中声明了相同的静态变量名,则数据段包含的不仅仅是同一变量的声明。如果是这样的话,会发生碰撞吗?
所以,存储静态变量的地方。我认为它存储在文本段中。所以,只在函数的每次迭代中,静态中的值 变量保持不变。如果它在数据段中,则发生冲突。如果它在堆栈中,则变量的范围会延伸到函数的生命周期,因此它无法主导存储在变量中的值。是不是?
答案 0 :(得分:1)
静态变量存储在内存中的数据段中。他们的生命时间是程序终止。但它们的范围是声明它们的函数的局部范围。如果声明为全局,那么它们的范围仅限于声明它们的文件。
答案 1 :(得分:0)
在初始化数据段中,通常也称为数据段。
数据段是程序的虚拟地址空间的一部分,其中包含由程序员初始化的全局变量和static
变量。
答案 2 :(得分:0)
变量的存储位置取决于变量的生命周期。静态变量的生命周期是整个程序的生命周期。因此,静态变量和全局变量存储在内存的data segment
中。
答案 3 :(得分:0)
静态变量存储在代码的数据段中。实际上,记忆分为3个主要部分:
文本段仅在编译代码后存储实际的可执行文件。因此,静态变量无法存储在文本段中。
Stack和Heap包含动态数据,即为堆栈中的范围(局部变量)声明的变量,堆中的全局/外部/未分配类型(通过malloc分配的内存,calloc等)以及每个函数的调用创建一个新堆栈。
这是许多递归代码因堆栈溢出而导致分段错误的原因之一
现在,具有静态链接的变量(静态变量,只读数据和未初始化的数据除了内存的数据段之外别无他法。现在可以有局部静态变量和全局静态变量.C总是优先选择局部变量到全局相同的名称,因此名称冲突不能出现在'c'中,除非在同一范围内声明具有相同名称的变量。