c - 静态函数的栈帧。-- 静态函数的局部变量
问题描述
如果我在 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
解决方案
static
除了链接之外,与非静态函数没有区别。static
函数没有外部链接,仅在一个编译单元中可见。
我在静态函数中使用 malloc 是什么,那么变量仍然是动态堆栈分配的
首先,C 语言对堆栈一无所知。堆栈用于大多数现代实现。在那些实现中,动态分配不会发生在堆栈上,只发生在称为heap
. 静态函数和非静态函数没有区别。
本地自动自动存储持续时间变量的分配方式相同,尽管函数联动。
推荐阅读
- node.js - 如何在 Sequelize 中使用带有函数调用的事务
- android - 引起:java.lang.UnsatisfiedLinkError: dlopen failed: library "/data/app/~~ ==/my package --CfG==/lib/arm64/libc++_shared.so" not found
- java - 如何解析具有相同标签名称的嵌套xml标签
- c# - 如何将 Observable.FromEvent 与 SignalR 关闭事件一起使用
- terraform - IBM Cloud:使用 Terraform 将密钥导入 Key Protect 时出现“未经授权”错误
- c# - 检查数据集详细信息在表单加载时查看文本框值
- javascript - 避免在 rambda 中重复参数
- javascript - Cropper.js,用居中的图像填充 div
- python - 用于 python 的正则表达式来捕获两个 XML 标记之间的所有内容
- css - 垂直填充父 flex-box 容器,每个容器高度为 33%