Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 静态变量存储在哪里?_C_Variables_Static - Fatal编程技术网

C 静态变量存储在哪里?

C 静态变量存储在哪里?,c,variables,static,C,Variables,Static,根据参考资料,它们中的许多被认为是存储在数据段中的。这意味着如果我在另外两个函数中声明了相同的静态变量名,那么数据段包含的不仅仅是相同变量的声明。如果是这样,碰撞是否发生 因此,静态变量存储在哪里。我认为它存储在文本段中。因此,只有在函数的每次迭代中,静态 变量保持不变。如果它位于数据段中,则会发生冲突。如果它在堆栈中,变量的作用域将扩展到函数的生命周期,因此它无法主控存储在变量中的值。是否正确?在初始化的数据段中,通常也称为数据段。 数据段是程序虚拟地址空间的一部分,其中包含由程序员初始化的全

根据参考资料,它们中的许多被认为是存储在数据段中的。这意味着如果我在另外两个函数中声明了相同的静态变量名,那么数据段包含的不仅仅是相同变量的声明。如果是这样,碰撞是否发生

因此,静态变量存储在哪里。我认为它存储在文本段中。因此,只有在函数的每次迭代中,静态
变量保持不变。如果它位于数据段中,则会发生冲突。如果它在堆栈中,变量的作用域将扩展到函数的生命周期,因此它无法主控存储在变量中的值。是否正确?

在初始化的数据段中,通常也称为数据段。
数据段是程序虚拟地址空间的一部分,其中包含由程序员初始化的全局变量和静态变量。

变量的存储位置取决于变量的使用寿命。静态变量的生命周期是整个程序的生命周期。因此,静态变量和全局变量存储在内存的
数据段中

静态变量存储在内存中的Datasegment中。它们的生存时间是直到程序终止。但是它们的作用域是声明它们的函数的局部范围。如果声明为全局,则其作用域仅限于声明它们的文件。

静态变量存储在代码的数据段中。实际上,内存分为三个主要部分:

  • 文本、数据和堆栈/堆
文本段仅存储编译代码后的实际可执行文件。因此,静态变量无法存储在文本段中

堆栈和堆包含动态数据,即,为堆栈中的作用域(局部变量)声明的变量,堆中的全局/外部/未分配类型(通过malloc、calloc等分配的内存),每个函数的调用都会创建一个新的堆栈
这是许多递归代码由于堆栈溢出而导致分段错误的原因之一


现在,有静态链接的变量(静态变量、只读数据和未初始化的数据除了内存的数据段外,别无选择。现在可以有局部静态变量和全局静态变量。C总是喜欢局部变量而不是同名的全局变量,所以在“C”中不会发生名称冲突,除非在同一范围内声明同名的变量

文本段存储程序代码。变量不能存储在文本段中,因为它们不是程序代码。(显然)全局静态变量或局部静态变量?正如您所知,这取决于实现(编译器),而C规范对此没有任何说明(或类似“段”的内容)。您之所以感到困惑,是因为您认为如果在两个不同的函数中使用相同的名称,则会出现名称冲突。事实并非如此。不存在这种冲突。会创建两个不同的变量。克服这种误解,您的问题就会解决。编译器会在每个全局静态变量的名称中添加前缀前缀通常从声明变量的文件名派生(这就是为什么在头文件中声明此类变量时可能会出现链接错误-如果头文件包含在多个源文件中,则同一全局变量将被多次声明)。如果变量存储在数据段中,那么变量可以像全局变量一样从程序的任何地方访问。不是吗?那么,静态变量如何放置在数据段中,其范围与函数有关。可能吗?@mohan你为什么关心段?这听起来像是你的思维模型,说明这一切是如何工作的ks太离谱了。你在错误的层次上考虑这个问题。至少现在不要考虑段。毕竟,标准没有提到它们。专注于理解语言,而不是一个特定的实现。@DavidHeffernan不是这样的。我只是想知道静态变量是如何像ot一样在内部存储的她的变量。例如:如果我想参加一个关于这个的会议,我必须知道静态变量的a到z。在那里,我不能说出这些类型的答案。我们也不会说没有标准实现的参考。我们搜索答案的方式是错误的。但是,在某个地方答案是可用的。我们想要找到答案直到我们得到答案。无论如何,谢谢你的帮助……你的方法不对。知道它们的存储位置没有帮助。在没有像你的机器那样组织段的机器上实现如何?首先从较高的层次理解语言。@mohan:我的朋友静态变量存储在da中ta段,根据您的说法,它可以从程序内的任何地方访问,就像全局变量一样。我理解您的观点,但让我向您说明,静态变量的范围在使用它的模块内,但它的生命周期贯穿于程序的整个生命周期。