打印

C51的内存问题

[复制链接]
2137|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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个没有分配到寄存器,前两个分配到寄存器了??为什么会这样?

使用特权

评论回复
5
刘前辈| | 2012-1-7 14:53 | 只看该作者
很简单,1和2经过编译器优化,而3没有值得优化的地方。你把编译器的优化级别设置到2以下,就没有疑问了。






、、

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:细节打败一切

2

主题

184

帖子

0

粉丝