【问题标题】:What is the meaning of "statically allocated"?“静态分配”是什么意思?
【发布时间】:2015-06-02 00:25:38
【问题描述】:

http://linux.die.net/man/3/pthread_mutex_init

在默认互斥属性合适的情况下,宏 PTHREAD_MUTEX_INITIALIZER 可用于初始化互斥锁 静态分配。效果相当于动态 通过使用参数 attr 调用 pthread_mutex_init() 进行初始化 指定为 NULL,但不执行错误检查。

我知道动态分配。 “静态分配”是什么意思?

我的问题是理解“静态”分配的含义。我发布了手册页中的引用以提供上下文。

【问题讨论】:

标签: c pthreads


【解决方案1】:

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

这里有一个很好的概述: http://en.wikipedia.org/wiki/Static_memory_allocation

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

【讨论】:

  • 令人困惑的是,人们有时会说“静态分配”包括自动分配(又名堆栈变量)
  • 这意味着这些变量(如字符串字面量)在程序编译时会消耗内存?
  • @CoolGuy:基本上是的。它们的大小是在编译时确定的。当二进制文件加载到内存中时,将为它们分配空间。
  • @MattMcNabb 那么,它们与堆栈上的变量不同吗?
  • 堆栈上的变量(即函数中没有static关键字的局部变量)在函数被调用时分配,有时在递归调用函数时分配多次。所以它们在概念上不同于静态内存分配(每个程序只发生一次)。
猜你喜欢
  • 2011-07-10
  • 2017-03-18
  • 1970-01-01
  • 2011-01-19
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 2016-08-22
相关资源
最近更新 更多