1. 现在计算机都直接在代码底层支持栈的结构,这体现在,底层有专门的寄存器指向栈所在的地址(SS,堆栈段寄存器,存放堆栈段地址);有专门的机器指令完成这种入栈出栈的操作(push,pop)。
    这种机制效率较高,但支持的数据类型较少,一般是整数,浮点,指针等系统直接支持的数据类型,并不支持其他的数据结构(自定义栈)。因为这种特点,栈在程序中的使用特别频繁,对于子程序的调用,就是直接利用栈完成的,机器的call指令中隐含了把返回地址入栈,而子程序的ret指令则是从堆栈中弹出返回地址并跳转的操作。

  2. 堆是由函数库提供的而不是系统支持,基本malloc/calloc/realloc/free函数维护了一套内部的堆结构(在C++中则增加了new/delete维护)。