C 何时分配静态函数变量?
我有一个关于静态变量内存分配的问题。请看下面的片段C 何时分配静态函数变量?,c,C,我有一个关于静态变量内存分配的问题。请看下面的片段 #include<stdio.h> #include<conio.h> void fun(); static int a; void main() { fun(); getch(); } void fun() { static int b; } 有人能解释一下,在执行main之前,函数fun中的静态int b何时会被分配内存,或者函数何时被定位。我知道静态内存只分配一次,但我想知道什么时
#include<stdio.h>
#include<conio.h>
void fun();
static int a;
void main()
{
fun();
getch();
}
void fun()
{
static int b;
}
有人能解释一下,在执行main之前,函数fun中的静态int b何时会被分配内存,或者函数何时被定位。我知道静态内存只分配一次,但我想知道什么时候会为它分配内存。请解释一下
我使用的是64位处理器、turbo c编译器、windows 7操作系统。加载程序时,会为静态变量分配内存。函数中的静态变量在第一次调用函数之前初始化。在这种情况下,没有为b分配。它是一个int,并在加载应用程序时添加到堆栈中。静态内存通常在程序加载/开始执行之前分配。静态内存与全局内存位于同一位置。它们的空间在编译时设置,在加载时分配。示例问题中的静态变量a和b的内存在编译时分配。您可以通过检查地图文件来验证这一点。请注意,根据映射文件中提供的详细信息,您可能看不到静态变量的变量名,而只是看到已分配了相应的内存量。当程序与全局变量一起加载时,它们被初始化…不是第一次调用函数。当在函数块内使用static时,关键字static会更改变量或函数的存储类,这意味着static int b;就是说b是一个静态变量,而不是一个自动变量 当谈到存储类时,静态类在程序运行之前在静态内存中初始化,并且在程序运行时始终存在,而自动类在到达某个块时在运行时堆栈或堆中初始化,在程序出块时销毁 当static在外部使用时,如在static int a中;显示,这是另一种情况。它将变量的链接更改为内部链接,而默认值为外部链接。它和变量或函数的存储类无关
对于static,a是内部的,这意味着它只能被该文件中的那些人访问。如果没有静态,默认情况下a设置为外部,这意味着定义a的文件内外的人都可以访问它。请在第5通道进行清理?我还没有那种能力。这是一个问答网站,不是免费的私人咨询网站。如果愿意,您可以请求通过电子邮件通知答案。在这种情况下,由于未指定值,我希望在程序的BSS段中分配空间。这只是加载程序在运行时分配的一块0初始化内存。我不会指望代码中没有初始化的变量在分配时被初始化为0。@pascal,标准§6.7.8/10要求没有初始化器的静态算术变量被初始化为0。