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

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

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

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

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

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

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

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

发布了143 篇原创文章 · 获赞 370 · 访问量 81万+

猜你喜欢

转载自blog.csdn.net/cp1300/article/details/104335505
今日推荐