c - 在 C 语言中,使用全局变量对堆栈有帮助吗?

标签 c performance

不,我是认真的。

我刚刚看到有人将函数的局部变量移动到全局状态,提交消息为“Relieve the stack”。

做这种事情真的有理由吗?

最佳答案

首先,将变量放在全局变量中并不能直接提高 CPU 使用率。堆栈初始化通常是在函数入口/导出处的单个加法/减法,与堆栈帧大小无关。

但是,如果函数需要非常大的工作集,最好将它放在堆栈以外的地方;堆栈的大小通常是相当有限的。通常的选择是堆;然而,这确实需要时间来分配和释放,因此如果您要经常调用该函数,它可能会很昂贵。这也是嵌入式系统上的一个问题,它们可能没有正确的堆实现。

所以如果堆是个问题,全局变量可以是一个解决方案。但是,它们有自己的缺点 - 特别是,您不想让多个线程同时处理全局数据,也不能在不小心的情况下递归通过此函数,否则递归的位可能会损坏对该函数的早期调用。

因此,在某些情况下,这是一种很有用的技术。但是,由于线程问题,我不建议将它作为首选。

此外,无论其值(value)如何,您都可以使用 static 变量获得相同的内存效果。我建议改用这些,否则你最终会污染全局命名空间。

关于c - 在 C 语言中,使用全局变量对堆栈有帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4898847/

相关文章:

MySQL 连接性能

c - 声明意外行为

php - 打开/关闭标签和性能?

c - printf 的输出乱序

c - C 标准库中 mergesort() 的链接错误

java - 这是编写该方法最有效的方法吗?

ruby-on-rails - Rails:使用RSPec进行性能基准测试

MYSQL View 与选择性能和延迟

arrays - 为什么我的条件无法检测到空字符?

c++ - PE : Adding code at the end of . txt 部分