2010-03-14 101 views
8

设计简单的C程序来分配堆栈中的所有内容还是大部分内容都是不好的方式?C中的堆栈分配

+3

这取决于“一切”的含义。 – AraK 2010-03-14 08:27:42

+1

如果你要用当地人和参数去做所有事情,为什么你首先使用C?改用ML,Haskell,Erlang等功能语言代替。 – 2010-03-14 08:30:23

+0

与之相对,你在想什么?全局变量或堆上的数据? – 2010-03-14 08:37:27

回答

16

如果你不需要它,使用堆分配是不好的风格。尤其在简单的程序中。

+2

如果可以,我会超过+1。堆栈分配是安全的,防止内存泄漏,并避免空指针或垃圾指针问题。尽可能使用它。 – kyoryu 2010-03-14 08:43:21

+1

+1 - 绝对 - 堆是比堆栈更复杂的数据结构,在许多情况下不仅是不必要的开销,而且还会导致潜在问题(如悬挂指针,内存泄漏,堆损坏等)造成不必要的复杂性。没有理由在需要时避免堆,但肯定是“需要时”选项,而不是合理的默认选项。 – Steve314 2010-03-14 08:45:34

+0

而且在C中没有堆。 – 2010-03-14 08:54:16

1

如果我们把重点放在SIMPLE程序上,就像你说的那样,那么不,那不是那么糟:)你也可以看看C99可变长度数组(这里是一个简单的例子:http://en.wikipedia.org/wiki/Variable-length_array)。

+0

+1提及VLA。我在一个小型项目中使用它们,并且他们大部分时间帮助避免堆分配。 – helpermethod 2010-03-14 10:04:00

0

不需要,除非你有变量具有不固定的大小。这样的代码可能会很快导致堆栈溢出。

3

堆栈分配比堆分配便宜。从堆栈分配和取消分配只是简单的计数器增量和递减函数(或更准确地说:范围)进入/退出。堆分配意味着在可能分散的地址空间中找到足够大的内存块。由于该堆栈分配几乎总是可取的。

不使用堆叠中的主要理由是:

  • 所需的尺寸是未知的,直到运行时间。
  • 需要大量内存(兆字节);这可能会导致堆栈大小通常限制为两位数兆字节的系统出现问题。
+2

或者如果需要大量内存(千字节)这可能会导致堆栈大小通常限制为两位千字节数的系统(例如PC上的设备驱动程序或大多数嵌入式系统中的任何程序)出现问题。 – Dipstick 2010-03-14 09:11:44

1

堆的主要优点是可以动态分配它。如果你不知道你需要的变量的大小:堆。

如果你的程序很简单,你可能不需要在堆上分配一个变量;但是选择并不取决于程序的复杂性,它取决于您对变量的需求。 如果您需要通过多种功能访问/修改整个工作流程中的变量,那么它在堆上更好。当你不再需要它时,你会释放它。 如果变量只是一个选项结构或计数器,堆栈对它来说是完美的。