[C语言] 关于内存分配的问题

[复制链接]
1362|2
 楼主| 醉心369 发表于 2014-3-12 22:33 | 显示全部楼层 |阅读模式
单片机中的RAM是不是有堆、栈和静态区呢?
每个区域的大小是固定的吗,还是他们会根据具体使用而动态变化 的?

有如下定义:
char *p="abcdef";
char a[]="123456";

该定义在函数内部,则指针变量p在栈上,abcdef在静态区,数组a在栈上。
如果该定义在函数外部,作为全局变量,他们的内存分配是否还是与在函数内部是一样的?
(我看书这样写道:全局变量在静态区)
ayb_ice 发表于 2014-3-13 11:06 | 显示全部楼层
这和具体编译器有关
很多低端MCU的C编译器并不符合标准C的分配原则,主要是这些MCU没有合适的指令支持栈分配变量,此时局部变量也是静态分配的,C51也是这样的

一般情况是
局部非静态变量会从栈中分配,
全局,静态,是静态分配的,地址是固定的
"123456"字符串是代码区
 楼主| 醉心369 发表于 2014-3-13 22:28 | 显示全部楼层
ayb_ice 发表于 2014-3-13 11:06
这和具体编译器有关
很多低端MCU的C编译器并不符合标准C的分配原则,主要是这些MCU没有合适的指令支持栈分配 ...

keil c51的局部变量是静态分配的?只有指针是在桟上吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

283

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部