gpt4 book ai didi

c - 堆栈还是堆?对于已知大小的变量,选择哪一个?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:53 27 4
gpt4 key购买 nike

我阅读了一些关于堆栈和堆内存的更多信息。所有优点和缺点都在这里:What and where are the stack and heap?

但是我一直有这个问题。我应该为我的变量使用堆栈还是堆?刚才我有一个大小约为 10kb 的结构。

  • 我将在整个程序中全局使用它
  • 我知道必要结构的最大数量为 1000。(总共 10MB)
  • 有时我只会使用其中一个,所以其余的 999 是空的。
  • 我不会使用任何循环。
  • 该程序将在 Linux(具有 512MB RAM 的树莓派)上全天候运行,我将以 5 秒的间隔访问单个结构。

你有什么建议?我应该在堆栈或堆上分配它吗?两者各有优缺点

提前致谢。

最佳答案

10MB 的堆栈在像 Rasberry Pi 这样的小型计算机上是不合理的。

call stack 上的典型堆栈帧应该是几千字节(特别是对于最近的软件,它们有许多调用深度的函数,例如当使用像 Qt 或 Gtk 这样的工具包时)。

所以我建议在您的情况下使用堆。

顺便说一句,一旦你malloc-ed 一个指针,访问它(在栈上或堆上)几乎是等价的(有缓存,但如果你经常访问它,它会留在 L1缓存)。典型的 malloc(或 free)需要几十微秒。所以对于一千个这样的数据,堆不是什么大问题。

当然,你要小心避免 memory leaks (通过 free 适本地处理 malloc 处理的数据)。也许使用 valgrind .

您可以考虑使用 Boehm's conservative garbage collector ,那么您将编写 GC_MALLOCGC_STRDUP 而不是 mallocstrdup 并且您不会打扰 免费-ing数据。

关于c - 堆栈还是堆?对于已知大小的变量,选择哪一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19574968/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com