Ale*_*all 10 c embedded pointers global micro-optimization
假设我有一个类似以下的结构......
typedef struct {
int WheelCount;
double MaxSpeed;
} Vehicle;
Run Code Online (Sandbox Code Playgroud)
...我有一个这种类型的全局变量(我很清楚全局变量的缺陷,这是一个嵌入式系统,我没有设计,为此他们是一个不幸但必要的邪恶. )直接或通过指针访问结构成员是否更快?即
double LocalSpeed = MyGlobal.MaxSpeed;
Run Code Online (Sandbox Code Playgroud)
要么
double LocalSpeed = pMyGlobal->MaxSpeed;
Run Code Online (Sandbox Code Playgroud)
我的任务之一是简化和修复最近继承的嵌入式系统.
Ree*_*sey 20
一般来说,我会说第一个选择:
double LocalSpeed = MyGlobal.MaxSpeed;
Run Code Online (Sandbox Code Playgroud)
这有一个较少的解引用(你没有找到指针,然后取消引用它来到达它的位置).它也更简单,更易于阅读和维护,因为除了struct之外,您不需要创建指针变量.
话虽如此,我认为即使在嵌入式系统上,您看到的任何性能差异都不会显着.两者都是非常非常快的访问时间.
第一个应该更快,因为它不需要指针解除引用.那么对于基于x86的系统来说也是如此,对其他人来说并不确定.
在x86上,第一个会翻译成这样的东西
mov eax, [address of MyGlobal.MaxSpeed]
Run Code Online (Sandbox Code Playgroud)
而第二个就是这样的
mov ebx, [address of pMyGlobal]
mov eax, [ebx+sizeof(int)]
Run Code Online (Sandbox Code Playgroud)