再详细可参考博客文章小白笔记3---堆栈
堆栈:
堆(heap): 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收;公用,如果想要使用,可以通过malloc(sizeof(xxx))得到一部分堆空间;堆是由低地址向上增.
栈(stack):由编译器自动分配释放,包括函数的参数,局部变量值等临时变量,用完即释放;栈是由高地址向下.
二者都是连续的
若堆一直往上增加,而栈一直向下申请,那么最后可能会造成堆栈溢出
以51单片机举例,51单片机存储空间包括片内RAM,片外RAM,ROM;
片内RAM具体分区: 00H ~ 1FH 工作寄存器
20H ~ 2FH 位寻址区
30H ~ 7FH 用户RAM区
80H ~ FFH 特殊功能寄存器(52单片机高128位)
堆栈区是在RAM中开辟的一块地址,同时提供了相对应的硬件,即SP寄存器.
一般堆栈区在低128位,单片机复位后,SP默认地址为7FH.
在51单片机中,ROM的地址为0000H~FFFFH(64k),使用与RAM不同的指令操作.
在MSP430中,存储器采用统一结构,虽然物理上完全分离存储区域,如RAM,ROM,外围模块,SFR等,但是被安排在同一地址空间,使用同一组地址,数据总线,指令.
MSP430中,堆栈的存储空间在0200H以上.