为什么有堆栈和堆?

mca*_*dre 12 memory heap stack allocation

汇编语言为什么同时使用堆栈和堆?他们似乎多余.

tda*_*ers 13

他们不是多余的.它们中的每一个都有优点和缺点:如果正确使用堆栈会更快,因为内存分配是微不足道的(推/弹).缺点是您只能在顶部添加和删除项目(因此名称,堆栈).此外,总堆栈空间有限,当你用完时,你有一个......好吧,堆栈溢出.相反,堆允许随机分配和释放,并且您可以在那里存储大量数据,但缺点是分配带来更多开销 - 对于每个分配的内存块,必须找到合适的空闲部分,并且长期来看,需要避免自由空间的碎片化,系统必须跟踪空闲区块的位置.

您可以使用堆栈传递小的短期值,例如本地计数器变量,函数参数,返回值等; 这些可以推动/弹出分配方式.对于较大或较长寿的数据结构,可以使用堆.