首页 > 解决方案 > 静态函数的栈帧。-- 静态函数的局部变量

问题描述

如果我在 C 中有一个简单的函数

喜欢

int print(int x)
{

  int x;
  x=getNextNum()

  return x;    
}

在上面的函数中说在上面的代码中有一个针对函数打印地址的连续堆栈帧是否正确

以及静态函数的堆栈框架如何与上述函数等简单函数区分开来。

例如我有一个 sttic 函数

static void print(int x)
{

int x;
x=8;

}

我知道如果我们想在其他文件中重用函数的名称和类似的签名,那么我们可以在函数签名的开头用 static 关键字标记它。在存储方面区分静态功能和普通功能是否有任何其他解释。我在静态函数中使用 malloc 是什么,那么变量仍然是动态堆栈分配的,因此它与普通函数有何不同。同样在没有 malloc 的情况下分配的变量的堆栈框架,如堆栈上的 int 或 char

标签: c

解决方案


static除了链接之外,与非静态函数没有区别。static函数没有外部链接,仅在一个编译单元中可见。

我在静态函数中使用 malloc 是什么,那么变量仍然是动态堆栈分配的

首先,C 语言对堆栈一无所知。堆栈用于大多数现代实现。在那些实现中,动态分配不会发生在堆栈上,只发生在称为heap. 静态函数和非静态函数没有区别。

本地自动自动存储持续时间变量的分配方式相同,尽管函数联动。


推荐阅读