静态与 Malloc

2023-12-27

与使用 malloc 相比,块作用域中的 static 关键字有什么优势?

例如:

功能A:

f() {
    static int x = 7;
}

功能B:

f() {
    int *x = malloc(sizeof(int));
    if (x != NULL)
        *x = 7;
}

如果我理解正确的话,这两个程序都会创建一个存储在堆上的整数 7。在 A 中,变量是在 main 方法执行之前在某个永久存储中一开始创建的。在 B 中,您将在调用函数后就地分配内存,然后在该指针指向的位置存储 7。在什么类型的情况下您可能会使用一种方法而不是另一种方法?我知道你不能释放函数 A 中的 x,那么这是否会让 B 通常更可取?


这两个程序都创建了一个integer 7存储在堆上

不,他们没有。
static创建一个具有静态存储持续时间的对象,该对象在程序的整个生命周期中都保持活动状态。而动态分配的对象(由...制作malloc) 保留在内存中,直到被显式删除free。两者都提供不同的功能。static在函数调用中维护对象的状态,而动态分配的对象则不会。

在什么类型的情况下您可能会使用一种方法而不是另一种方法?

You use static当您希望对象在程序的整个生命周期中都处于活动状态并在函数调用中保持其状态时。如果您在多线程环境中工作也是如此static对象将为所有线程共享,因此需要同步。

You use malloc当您明确想要控制对象的生命周期时。例如:确保对象生命周期足够长,直到函数调用者在函数调用后访问它为止。(一旦范围达到,自动/本地对象将被释放{ }函数结束的)。除非调用者明确调用free分配的内存会被泄漏,直到操作系统在程序退出时回收它为止。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

静态与 Malloc 的相关文章

随机推荐

  • 主键和外键同时存在的原则2

    我有两张表 table A with id作为主键 table B with id作为主键和外键 短线的解释 我需要在表中B主键也是指向表的外键A的主键 谁能解释一下如何通过 Doctrine 2 中的注释来映射它 Note 我尝试过这样
  • Watir-webdriver:如何在没有 js/jquery 的情况下更改属性值

    如何在不使用 js jquery 的情况下使用 watir webdriver 更改 href 属性值 我可以获得一个属性值 browser frames 2 div id mid 2 link class btn lrg attribut
  • 如何创建森林图?

    我想将不同的风险比率合并到一个森林地块中 我希望输出类似于metamiss在 STATA 或metafor在 R 中 我怎样才能在 Python 中做到这一点 通过使用 zEPID 包 我创建了不同风险比的森林图 import matplo
  • 在报告中为 icCube 事件分配值

    我正在使用 icCube 5 0 报告 我想将事件的值分配给 icCube MDX 函数 UserName 返回的值 有点像 eventname UserName 最终 eventname reportParm 将被发送到启动的报告以在过滤
  • 创建可重用的 FormGroup

    我知道创建自定义controls作为组件 但我不知道如何创建自定义groups 同样我们可以这样做实施ControlValueAccessor https angular io api forms ControlValueAccessor并
  • soundex可以用于mysql中列的一部分吗?

    是否可以使用 soundex 将列的一部分与搜索词进行比较 例如 如果用户搜索 五十三 它将找到 Nirve Sports 五十三号巡洋舰金色金属色 我尝试将 soundex 与locate 函数结合起来 但出现错误 这是我的 php 代码
  • Android Studio 中不支持类型“add-resource”

    我在运行时遇到资源合并问题gradle build命令 日志如下 错误 任务 frameworks base core res res common packageReleaseResources 执行失败 gt 文件中不支持类型 add
  • iPhone 上基于位移贴图的 3D 效果

    我正在尝试制作一个使用置换贴图实现 3D 效果的应用程序 在 Flash 中 可以使用位移过滤器来完成 如下所示 http flashflex com pixel bender displacement map fakes 3d effec
  • JPA 多个嵌入字段

    JPA实体类是否可以包含两个嵌入的 Embedded 字段 一个例子是 Entity public class Person Embedded public Address home Embedded public Address work
  • 在 Visual Studio 2017 中生成 .NET Core 控制台应用程序 .exe

    我使用的是 Visual Studio 2017 我启动了一个小型控制台应用程序 我创建了一个 NET Core 应用程序 然后我想构建 exe 文件 但我得到的只是 dll 文件 没有任何 exe 文件 你能帮我吗 我需要在 Visual
  • Mysql从二进制日志读取数据时从master出错1236

    我有 2 个具有主 从配置的 MySql 并且复制失败 MySql Master崩溃了 新的寄存器在mysql bin index被创建 我删除了这个新的寄存器 因为文件系统中不存在该文件 然后MySql Master重启成功 现在 我在从
  • 使 Jackson 子类型可扩展,无需编辑超类型 java 文件

    在我的公司 我们有一个固定的 JSON 消息结构 headerVal1 headerVal2 customPayload payloadType 我想要某种库 它允许我不关心公司定义的消息结构 而只是发送和接收有效负载 我的想法是 将公司模
  • Java如何在Intellij中找到spark、Hadoop和AWS jar

    我正在 Java 中的 IntelliJ 上运行 Spark 应用程序 我已在 pom xml 中添加了 Spark Hadoop 和 AWS 依赖项 但不知何故 AWS 凭证并未加载 我得到的确切错误是Caused by com amaz
  • 如何在Asp.net的图像控件中显示数据库中的图像?

    如何在Asp net的图像控件中显示数据库中的图像 我们必须在asp net页面中显示员工的图像及其详细信息 但问题是如何在asp net图像控件上显示图像 因为图像控件通过属性ImageUrl来拍照 请指导 您可以创建一个 HttpHan
  • 单个 lambda、多个 cloudwatch 日志组

    运行 AWS lambda 后 将填充单个 cloudwatch 日志组 有没有一种方法可以从单个 AWS lambda 填充两个 不同的 cloudwatch 日志组 我搜索了一下但找不到答案 让我知道是否可能 无法从单个 lambda
  • NoReverseMatch at / Reverse for 'post_detail' 未找到关键字参数 '{'pk': ''}'

    我一直在尝试让这个应用程序工作 我运行 python manage py runserver 一切都很好 我能够看到该网站 以超级用户身份登录 发表评论 但是在尝试查看帖子时我开始收到错误 现在 如果我只是访问该网站 就会收到错误消息 我收
  • Javascript/jQuery onclick 不起作用

    我制作了一个 test html 文档来测试脚本 不知怎的 它不起作用 我不明白为什么什么也没有发生 脚本位于 tags 中并用 tag 包裹 CSS 也有它的 tags 为什么它不起作用 这是代码
  • Html 敏捷包帮助

    我正在尝试从网站上抓取一些信息 但找不到适合我的解决方案 我在互联网上读到的每一个代码都会至少产生一个错误 即使他们主页上的示例代码也会给我带来错误 My code HtmlDocument doc new HtmlDocument doc
  • 我可以使 Dialogflow 意图至少需要一个经过训练的实体吗?

    我知道如何使意图需要任何参数值 之后意图将强制获取该值 但有可能让它强制得到atleast给定实体参数之一 您可以为该意图启用 Webhook 实现 如果未提供实体 则重新提示用户至少提供一组实体之一
  • 静态与 Malloc

    与使用 malloc 相比 块作用域中的 static 关键字有什么优势 例如 功能A f static int x 7 功能B f int x malloc sizeof int if x NULL x 7 如果我理解正确的话 这两个程序