1、栈区(stack)—
由编译器自动分配释放
,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap)
—
一般由程序员分配释放,
若程序员不释放,程序结束时可能由OS回收
。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,
未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
-
程序结束后有系统释放
4、文字常量区—常量字符串就是放在这里的。
程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。
在子程序中声明的变量叫局部变量,退出子程序时释放内存
而在主程序中声明的叫全局变量,在程序运行过程中一致有效。
为了节约内存,能用局部变量就不要用全局变量
void main()
{
d1=0;
uint a;
a=65535;
while(--a);
d2=0;
}
你那个 uint a要在函数最开始定义。
其他环境我不清楚,反正在C51里,变量定义之前,不允许有执行语句的存在。
我的C语言是在VC++ 的控制台下学习的,刚转到51时,也曾经犯过你这种错误,当时找了很久才发现。
C51,包括 Keil在内的其他单片机的C语言,都不允许在定义变量之前有执行语句的存在,如果你在变量定义之前定义宏是可以的,但是不能出现执行语句。
单片机入站时局部变量的介绍到此就结束了,感谢您耐心阅读,谢谢。
本文标签:单片机入站时局部变量