直接赋值与结构体赋值效率差异

一直想直接用结构体,把所有相关的函数都放进去(通过函数指针,然后把函数赋值给函数指针),这样对外使用的时候就一个结构体把相关的函数都集合到一起了,很像类一样,而且方便函数补全,只要结构体名称,点后面就会出现所有的成员,方便选择,如果直接是函数,记不清前面开头还得去寻找。

最近有个小工具就是写成结构体方式对外调用,见:https://blog.csdn.net/cp1300/article/details/104234753

但是一直担心结构体赋值是否与直接赋值或者直接调用某个函数存在效率差异,就做了一个测试,直接仿真可以看到是没有任何效率差异的,都是3条指令。

都是小使用MOVS指令,将要赋值的常量拷贝到r0;

然后使用LDR指令,获取要赋值的数据的指针,并赋值到r1

最后调用STRB将 r0的数据存储到r1,可以看到STRB指令后面有个常量,上面的是0x8E2,下面的是0,这个是一个偏移,理论上这个偏移是0还是非零应该不会影响STRB指令执行的时间,由于结构体是在内部偏移,跟数组一样,第一个对象的偏移是0,后面肯定都是非零,而常量的偏移都是0.

因此使用结构体并不会降低访问效率,将同类型的功能函数或者全局变量放到一个结构体,便于管理。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cp1300

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值