请教c51,使用code定义数据,一个int类型的数据占用几个字节

[复制链接]
2680|10
手机看帖
扫描二维码
随时随地手机跟帖
梦想的天空|  楼主 | 2015-1-29 00:21 | 显示全部楼层 |阅读模式
我在用c51时,用code定义了一个数组,类型为int,发现每增加一个数,编译后程序大小增加了6个字节
#define sj_n 2          //预设组数据大小
unsigned int code        sj_data[sj_n]={//预设数据
7001 ,7002
};
编译后:
Program Size: data=105.1 xdata=53 code=5258

#define sj_n 1          //预设组数据大小
unsigned int code        sj_data[sj_n]={//预设数据
7001
};
编译后:
Program Size: data=105.1 xdata=53 code=5252

两次编译前后就是多了一个数据,但是code产生了6个字节的变化,求解释,int数据本身是占用两个字节,这里怎么占用了6个字节,

相关帖子

hiliuzheng| | 2015-1-29 09:00 | 显示全部楼层
int变量始终是2字节。
多出来的是代码的变化,访问code区使用movc指令,访问data区是mov指令。指令长度不一样

使用特权

评论回复
梦想的天空|  楼主 | 2015-1-29 10:12 | 显示全部楼层
如果我定义一个数组,有100个数,那就要占用600字节的空间,有设么方法可以减少空间占用吗

使用特权

评论回复
cainiao_123| | 2015-1-29 10:53 | 显示全部楼层
一般肯定是2个字节,可能跟程序访问方式有关。

使用特权

评论回复
mmuuss586| | 2015-1-29 18:07 | 显示全部楼层

放在DATA区看看;

使用特权

评论回复
戈卫东| | 2015-1-29 18:30 | 显示全部楼层
2

使用特权

评论回复
梦想的天空|  楼主 | 2015-1-29 21:16 | 显示全部楼层
经过尝试,如果把数据放在.c文件里定义就没有问题,一个数占用2个字节,放在.h文件里就是一个数占用6个字节,

使用特权

评论回复
zyj9490| | 2015-1-29 22:12 | 显示全部楼层
本帖最后由 zyj9490 于 2015-1-29 22:13 编辑

同意2楼,是用MOVC指令。多用字节。

使用特权

评论回复
hiliuzheng| | 2015-1-30 14:28 | 显示全部楼层
楼主可以贴一下代码,这样好分析

使用特权

评论回复
hiliuzheng| | 2015-1-30 14:31 | 显示全部楼层
之前没有仔细看1楼说明,不好意思。
当你使用数组之后,访问变量方式和独立变量不同。数组需要通过movc a+dptr这样的指令,独立变量可能就是简单的movc @pc一类指令。详细的结结果楼主可以看看编译器生成的汇编代码

使用特权

评论回复
戈卫东| | 2015-1-30 16:46 | 显示全部楼层
梦想的天空 发表于 2015-1-29 21:16
经过尝试,如果把数据放在.c文件里定义就没有问题,一个数占用2个字节,放在.h文件里就是一个数占用6个字节 ...

可能它在多处为相同名字的变量分配了存储。
这应该是错误的用法。

使用特权

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

本版积分规则

10

主题

43

帖子

1

粉丝