C中的堆栈分配
如果我们把重点放在SIMPLE程序上,就像你说的那样,那么不,那不是那么糟:)你也可以看看C99可变长度数组(这里是一个简单的例子:http://en.wikipedia.org/wiki/Variable-length_array)。
+1提及VLA。我在一个小型项目中使用它们,并且他们大部分时间帮助避免堆分配。 – helpermethod 2010-03-14 10:04:00
不需要,除非你有变量具有不固定的大小。这样的代码可能会很快导致堆栈溢出。
堆栈分配比堆分配便宜。从堆栈分配和取消分配只是简单的计数器增量和递减函数(或更准确地说:范围)进入/退出。堆分配意味着在可能分散的地址空间中找到足够大的内存块。由于该堆栈分配几乎总是可取的。
不使用堆叠中的主要理由是:
- 所需的尺寸是未知的,直到运行时间。
- 需要大量内存(兆字节);这可能会导致堆栈大小通常限制为两位数兆字节的系统出现问题。
或者如果需要大量内存(千字节)这可能会导致堆栈大小通常限制为两位千字节数的系统(例如PC上的设备驱动程序或大多数嵌入式系统中的任何程序)出现问题。 – Dipstick 2010-03-14 09:11:44
堆的主要优点是可以动态分配它。如果你不知道你需要的变量的大小:堆。
如果你的程序很简单,你可能不需要在堆上分配一个变量;但是选择并不取决于程序的复杂性,它取决于您对变量的需求。 如果您需要通过多种功能访问/修改整个工作流程中的变量,那么它在堆上更好。当你不再需要它时,你会释放它。 如果变量只是一个选项结构或计数器,堆栈对它来说是完美的。
这取决于“一切”的含义。 – AraK 2010-03-14 08:27:42
如果你要用当地人和参数去做所有事情,为什么你首先使用C?改用ML,Haskell,Erlang等功能语言代替。 – 2010-03-14 08:30:23
与之相对,你在想什么?全局变量或堆上的数据? – 2010-03-14 08:37:27