C51的内存问题

[复制链接]
3059|4
 楼主| zhbsniper 发表于 2012-1-6 15:53 | 显示全部楼层 |阅读模式
本帖最后由 zhbsniper 于 2012-1-6 15:57 编辑

#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a;
uint b;

uint sum(uint c)
{

uint d;


d = c;


return d;

}
void main()
{}
Program Size: data=12.0 xdata=0 code=17
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a;
uint b;

uint sum(uint c)
{

uint d;


d = c;


return d;

}
void main()
{

b = sum(5);

}
Program Size: data=12.0 xdata=0 code=28
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar a;
uint b;

uint sum(uint c)
{

uint d;

}
void main()
{

}
Program Size: data=16.0 xdata=0 code=21
TYPE   BASE   LENGTH    RELOCATION   SEGMENT NAME

-----------------------------------------------------

* * * * * * *
D A T A   M E M O R Y
* * * * * * *



REG  0000H  0008H  ABSOLUTE   "REG BANK 0"


DATA 0008H 0004H UNIT  ?DT?_SUM?MAIN


DATA 000CH 0003H UNIT  ?DT?MAIN


IDATA 000FH 0001H UNIT ?STACK




上面是3个简单的程序的内存分配,及其M51文件中的内容。M51中第三个程序比前2个多了蓝色部分。为什么程序1和2 RAM分配相同,而程序3的却那么大,请教高手
ayb_ice 发表于 2012-1-6 16:28 | 显示全部楼层
本帖最后由 ayb_ice 于 2012-1-6 16:53 编辑

为局部变量分配内存(局部变量没有被分配到寄存器)
chinahmk 发表于 2012-1-6 16:32 | 显示全部楼层
又周五了,会不会很堵车啊
 楼主| zhbsniper 发表于 2012-1-6 18:13 | 显示全部楼层
2# ayb_ice
你是说第3个没有分配到寄存器,前两个分配到寄存器了??为什么会这样?
刘前辈 发表于 2012-1-7 14:53 | 显示全部楼层
很简单,1和2经过编译器优化,而3没有值得优化的地方。你把编译器的优化级别设置到2以下,就没有疑问了。






、、

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:细节打败一切

2

主题

184

帖子

0

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