堆栈分配比堆分配更便宜。从堆栈中分配和释放只是在函数(或更确切地说:作用域)进入/退出时进行的简单计数器递增和递减。堆分配意味着在可能存在碎片化地址空间中查找足够大的内存块。因此,堆栈分配几乎总是更可取的。 不使用堆栈的主要原因如下: 所需大小直到运行时才知道。 需要大量内存(兆字节),这可能会在堆栈大小通常仅限于双位数兆字节的系统上造成问题。
如果我们强调编写简单的程序,就像你所说的那样,那么情况并不糟糕 :) 你也可以看一下C99可变长度数组(这里有一个简单的例子:http://en.wikipedia.org/wiki/Variable-length_array)。
堆的主要优点是可以在其中动态分配内存。如果您不知道所需变量的大小:就使用堆。如果您的程序很简单,您可能不需要在堆上分配变量;但选择并不取决于程序的复杂性,而取决于您对变量的需求。 如果您需要在整个工作流程中通过多个函数访问/修改变量,则最好使用堆。当您不再需要它时,可以释放它。 如果变量只是一个选项结构或计数器,则堆栈非常适合它。