为什么要有栈?
为什么要把程序的内存有顺序的分开管理?
程序的执行是需要规则的,在约定速成的情况下,代码的执行是从上至下的。在这个基础上,如果要考虑函数的运行,在执行之前是很难预测出完整的执行顺序的,因此。把栈和堆无顺序的放在内存中是不合理的,因为这可能会错估一段函数的内存,从而导致程序的崩溃。
为什么要使用栈的逻辑管理要执行的函数?
程序的编译读取也遵循从上至下的道理,那在这个基础上运行一个程序,可以把先读取的函数语句运行,也可以把后读取的函数语句先运行(这不符合设计逻辑)。这两种方式都是可以的(当然也可以考虑无序运行,但这显然不合理),因此合理的执行逻辑是先进先出。这就是栈。
为什么要有堆?
在有栈的基础上,每段函数运行完内存都会释放掉,这就会导致程序毫无连续性,你可能会想那把栈上的函数处理完再释放不就行了?这回到了之前的问题,在此不多赘述。因此考虑连续性的时候就有了堆这个概念,堆用于存放一些有必要长期存储的变量,这可以实现函数之间的传参,也就是实现了程序的连续性。