C 指针与结构的直接成员访问

标签 c embedded pointers global micro-optimization

假设我有一个像下面这样的结构......

typedef struct {
  int WheelCount;
  double MaxSpeed;
} Vehicle;

...我有一个这种类型的全局变量(我很清楚全局变量的陷阱,这是针对嵌入式系统的,我没有设计它,但不幸的是必要的邪恶。)直接访问结构的成员还是通过指针访问结构的成员更快?即

double LocalSpeed = MyGlobal.MaxSpeed;

double LocalSpeed = pMyGlobal->MaxSpeed;

我的任务之一是简化和修复最近继承的嵌入式系统。

最佳答案

一般来说,我会选择第一个选项:

double LocalSpeed = MyGlobal.MaxSpeed;

这减少了一次取消引用(您没有找到指针,然后取消引用它以到达它的位置)。它也更简单、更易于阅读和维护,因为除了结构之外,您不需要创建指针变量。

话虽这么说,但我认为您看到的任何性能差异都不会引人注意,即使在嵌入式系统上也是如此。两者都将是非常非常快的访问时间。

关于C 指针与结构的直接成员访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1329096/

相关文章:

c - gcc -c 选项如何工作?

c - Socket,与INADDR_ANY绑定(bind)时如何查找本地地址

c - HAL_UART_Transmit发送错误数据

c - 输入第一个元素后出现段错误

c++ - 如何复制具有嵌套类(包含指向外部类的指针成员)的类的实例?

函数作为参数的 C++ 错误,对非常量的引用的初始值必须是左值

c - 从其他库 (OS X/POSIX) 重新导出共享库符号

c - 字符串和用户在 C 中输入的字符串有什么区别

c - 如何将 union 作为参数传递给函数

c - memcpy to union 没有按预期工作