C 最佳实践,堆栈与堆分配

标签 c stack heap-memory

我最近经常使用 c,发现我真的不喜欢处理内存管理,或者至少不喜欢这样的想法:如果我 malloc 一个指针,我必须释放它,即使这是最微不足道的事情。这导致我在堆栈上分配尽可能多的空间并使用 & 来获取它的位置。甚至制作单独的 int 和 inptr 变量(我在宏中使用 & 运算符时遇到了一些左值问题)。

我还没有找到很多我不得不处理向上(上方/下方)分配数据的地方。同时我需要相当数量的早期返回(我宁愿避免 gotos)。一般c意见怎么说?是否有任何明显迹象表明我应该在特定情况下使用其中一种或另一种。

附言让我有点担心的一件事是,由于对 malloc 使用了错误的 sizeof,我最近遇到了内存损坏问题,我没有立即注意到它,因为在那之后我的大部分代码路径都没有使用堆.您认为这种隐藏腐败的问题有多大?

最佳答案

如果出现以下情况,您应该使用 malloc:

  1. 您正在将指向非static const 数据的指针传递到调用堆栈中,或者
  2. 您要分配变量或只是分配大量数据(否则有堆栈溢出的风险)。

在其他情况下,堆栈分配应该没问题。

关于C 最佳实践,堆栈与堆分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836516/

相关文章:

c++ - 访问违规阅读位置

c - 排序数组中的下一个更高的数字

c - 段错误 11 但为什么呢?

c - 使用系统调用打印文件系统上的所有文件

compiler-construction - 在设计编译器时,处理递归是否需要特殊处理?

assembly - 使用带参数的函数时 ebp 和 esp 在堆栈中的行为

c++ - 如何保证单例不被过早销毁?

c - 访问动态分配的结构成员时为 "Segmentation fault"

C++ 我应该如何返回我的字节数组?

python - SystemError : Objects/cellobject. c:24:内部函数的参数错误