Chinaunix首页 | 论坛 | 博客
  • 博客访问: 96310
  • 博文数量: 13
  • 博客积分: 1404
  • 博客等级: 上尉
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-01 12:51
文章分类

全部博文(13)

文章存档

2014年(4)

2013年(3)

2012年(3)

2011年(1)

2009年(2)

我的朋友

分类: 嵌入式

2009-09-11 22:42:31

 最新在项目开发中发现有个程序员在函数的参数中使用结构体作为参数。惊讶半天,主要是本人从来没有这么用过。看了后给我第一感觉是这样编译难道可以通过? 自己试了一下果然可以。问了个牛人这是怎么回事,牛人告知其实与数组类似,将结构体指针传了进去。哎呀,编译器这么只能,感觉不对,肯定不是这样。网上查了半天没有找到满意的答案。于是乎将降生成的代码反汇编一把(使用ADS编译器),对着ARM汇编之指令说明,一边研究起来。在两个小时的攻关下,终于搞明白了。。。(废话有点多

   言归正传,其实很简单。其实函数参数默认是通过r0,r1,r2,r3四个寄存器传递的,多余的参数是通过将参数压入栈中传递的。同理对于一个结构体如果其大小少于32字节(4个寄存器),按照正常的方式通过r0到r3传递,多于32字节则是将多余的部分在堆栈上建立个备份进行传递。

    所以对于在ADS编译器下对于函数参数是结构体的传递,还是传入指针比较好。既高效(省去建立备份的时间),又节省栈空间。

阅读(14806) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~