[问题] 请教关于执行效率

楼主: bbnctu   2015-04-03 14:05:00
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
N/A
问题(Question):
typedef struct _AAA{
int a;
int b;
int c;
}AAA_T;
AAA_T aaa_db[10];
想请教板上各位先进
在function里面
对于global structure以下两种access aaa_db的方式
在执行效率是否有什么不同?
如果考虑执行过程中有可能会被更高priority的ISR插断
是否有哪一种做法较好呢?
Method 1 :
void test1(uint8 idx)
{
AAA_T *aaa_db_p = &aaa_db[idx];
aaa_db_p->a++;
aaa_db_p->b++;
aaa_db_p->c++;
}
Method 2 :
void test2(uint8 idx)
{
aaa_db[idx].a++;
aaa_db[idx].b++;
aaa_db[idx].c++;
}
感谢感谢
作者: LiloHuang (十年一刻)   2015-04-03 14:48:00
上述两种方法,开启编译器最佳化后,两者会是相同的。可打开 /FAs 选项 http://goo.gl/86mCHR 观察 cod 档案在 Release 模式下,两种方法所产生的 asm 指令会相同如果生成出的指令都一致,两者执行效率就会相同 :)
作者: dirkc (3781615)   2015-04-04 00:24:00
isr如果会存取aaa_db的话,我想你考虑过race condition了吧
作者: alongalone (沿着孤单的路)   2015-04-04 09:15:00
第一种写法是避免re-entrant 的时候炸掉啊, 有点看错. 看到取值就以为是把struct传进来..Orz

Links booklink

Contact Us: admin [ a t ] ucptt.com