C “是什么意思?”;静态分配“;?

C “是什么意思?”;静态分配“;?,c,pthreads,C,Pthreads,在默认互斥体属性合适的情况下,宏 PTHREAD_MUTEX_初始值设定项可用于初始化 静态分配的。该效应应等同于动态效应 通过使用参数attr调用pthread_mutex_init()进行初始化 指定为NULL,但不执行任何错误检查 我知道动态分配。“静态分配”的含义是什么 我这里的问题是理解“静态”分配的含义。我在手册页上发布这段引文只是为了提供一个上下文。静态分配意味着变量是在编译时分配的,而不是在运行时分配的。在C语言中,这可以是文件范围内的全局变量,也可以是函数中的静态变量 这里有一

在默认互斥体属性合适的情况下,宏 PTHREAD_MUTEX_初始值设定项可用于初始化 静态分配的。该效应应等同于动态效应 通过使用参数attr调用pthread_mutex_init()进行初始化 指定为NULL,但不执行任何错误检查

我知道动态分配。“静态分配”的含义是什么


我这里的问题是理解“静态”分配的含义。我在手册页上发布这段引文只是为了提供一个上下文。

静态分配意味着变量是在编译时分配的,而不是在运行时分配的。在C语言中,这可以是文件范围内的全局变量,也可以是函数中的
静态变量

这里有一个很好的概述:


调用函数时会分配堆栈上的变量(即没有
static
关键字的函数中的局部变量),有时递归调用函数时会分配多次。因此,它们在概念上不同于静态内存分配(每个程序只发生一次)。

它允许对文件作用域变量进行初始初始化,如示例中的
static pthread\u mutex\u t foo\u mutex=pthread\u mutex\u INITIALIZER,可能是重复的。令人困惑的是,人们有时会说“静态分配”以包括自动分配(又称堆栈变量),这意味着这些变量(如字符串文字)在编译程序时会消耗内存?@CoolGuy:基本上是的。它们的大小在编译时确定。当二进制文件加载到内存中时,将为它们分配空间。@mattmcnab因此,它们与堆栈上的变量不同?堆栈上的变量(即没有
static
关键字的函数中的局部变量)在调用函数时分配,有时在递归调用函数时分配多次。因此,它们在概念上不同于静态内存分配(每个程序只发生一次)。