【问题标题】:stack memory reuse gcc optimization in C?C中的堆栈内存重用gcc优化?
【发布时间】:2014-06-02 03:32:54
【问题描述】:

我想在 C 中实现反应式编程。反应式编程是数据流编程的一种形式。所以你有一些代码可以将数据发送到下一段代码等。

在单线程情况下,这需要我创建很多临时值。

gcc 是否可以选择重用不再使用的临时变量的堆栈内存?

为此,需要分析程序的数据流。它使用哪种算法? 最重要的是,我可以依靠它吗?

另一种选择是自己做。将必要的内存分配为 char 数组,然后使用指针。

【问题讨论】:

  • 你在堆栈上放了多少内存,你需要重用一些? :P
  • 可以看tail recursion了解问题。
  • 不过,大多数 Mac 默认情况下最多有 8 mb 的堆栈。你经常这样吗? :P
  • 一种大大减少堆栈使用的方法是定义一个包含所有数据变体的结构。在第一个要执行的函数处分配该区域。然后将 ptr 传递给该 malloc'd 区域给每个连续的函数。
  • @user3629249 不利的一面是你会在这里失去速度

标签: c gcc reactive-programming dataflow


【解决方案1】:

根据您的模型和环境,可能会有一个“肮脏”的解决方案:反应式程序经常将函数调用为过程,即没有返回值。如果是 C,则对应于 void 函数。如果你的框架遵循这个模型和 gcc,你可以使用noreturn 属性。

请注意,不禁止从noreturn 标记的函数返回。但是,不保证本地值和返回值,因为编译可能会将它们优化掉。但是,这正是您想要的。

要仅允许 void 函数,您可以在全局状态下收集对事件的结果(反应)。

如果您想要一个更通用但不是自动化的解决方案,有一种比数组方法更舒适的方法:只需在堆上分配所有不需要的变量并在下一次函数调用之前对它们进行收费。

【讨论】:

    猜你喜欢
    • 2016-10-25
    • 2020-12-03
    • 1970-01-01
    • 2020-11-20
    • 2011-08-15
    • 2011-03-16
    • 2018-08-08
    • 2019-08-11
    • 2011-07-16
    相关资源
    最近更新 更多