哪个效率高些

[复制链接]
 楼主| 午夜粪车 发表于 2012-9-16 08:18 | 显示全部楼层 |阅读模式
编译后那个效率高些
#define INT8U REG_T

INT16U m_data

push_to_buf(*(((REG_T*)&m_data)++));

push_to_buf((REG_T)(m_data<<8));

把m_data,放到一个REG_T的数组内;
zhaoxqi 发表于 2012-9-16 08:19 | 显示全部楼层
第一种移植吧
huangchui 发表于 2012-9-16 08:21 | 显示全部楼层
都不好,为什么要入栈呢
jiajs 发表于 2012-9-16 08:21 | 显示全部楼层
是啊,在C语言中不要去操纵堆栈
zhanghqi 发表于 2012-9-16 08:23 | 显示全部楼层
直接改汇编操作,并且这部分代码也必须用汇编
wyjie 发表于 2012-9-16 08:24 | 显示全部楼层
第二个应该是push_to_buf((REG_T)(m_data>>8));
一个做加法运算,一个做移位运算,看起来第一个效率要高些,但实际上可能并不如此。
zhenykun 发表于 2012-9-16 09:04 | 显示全部楼层
如果m_data是局部变量,第一种写法要求m_data不能放在寄存器中,第二个的m_data则可以放在寄存器,寄存器访问要比内存访问快很多。
 楼主| 午夜粪车 发表于 2012-9-16 09:05 | 显示全部楼层
push 是个函数,不是指令,现在改成push_to_buf();
jlyuan 发表于 2012-9-16 09:07 | 显示全部楼层
是的,如果所用的cpu支持多位移位运算,两者的效率不会有太大的区别,但第二种更安全。
 楼主| 午夜粪车 发表于 2012-9-16 09:07 | 显示全部楼层
push_to_buf((REG_T)(m_data>>8));是把m_data的低字节压上去这是大端还是说小端?
 楼主| 午夜粪车 发表于 2012-9-16 09:08 | 显示全部楼层
push_to_buf((REG_T)m_data);在大端模式下是把高字节压上去还是低字节压上去?
yszong 发表于 2012-9-16 09:09 | 显示全部楼层
我觉得你的REG_T一般来说是指寄存器类型,也就是说几位机,而第2种好像只能在8位机下工作。
dengdc 发表于 2012-9-16 09:12 | 显示全部楼层
第一种才要考虑大端小端的问题。
heweibig 发表于 2012-9-16 09:12 | 显示全部楼层
大端情况下,push_to_buf(*(((REG_T*)&m_data)++));压入的是低字节,小端情况下,压入的是高字节。
wyjie 发表于 2012-9-16 09:14 | 显示全部楼层
是啊,你这些在8位机下讨论才有意义。
jlyuan 发表于 2012-9-16 09:14 | 显示全部楼层
如果REG_T是int(16位或32位),push_to_buf(*(((REG_T*)&m_data)++));压入的不是m_data的低字节也不是m_data的高字节,而是与m_data相邻的int。
wuhany 发表于 2012-9-16 09:16 | 显示全部楼层
两个变异后,结果是一样的,都是直接地址访问了一个字节,然后放入通用寄存器,然后调用函数.
keil 4环境.
wuhany 发表于 2012-9-16 09:16 | 显示全部楼层
我师父喜欢这样写:
push_to_buf((((REG_T*)&m_data)[1]));
 楼主| 午夜粪车 发表于 2012-9-16 09:17 | 显示全部楼层
嗯知道了
 楼主| 午夜粪车 发表于 2012-9-16 09:17 | 显示全部楼层
结贴了,多谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

867

主题

10194

帖子

3

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