MST

星途 面试题库

面试题:C语言结构体定义风格规范之优化与设计

在一个大型的嵌入式系统项目中,需要频繁处理传感器数据。传感器数据包含时间戳(高精度,使用64位整数表示)、多个不同类型的测量值(如温度,用浮点数;湿度,用整数百分比)以及一些状态标志位(用位域表示)。请依据C语言结构体定义风格规范,设计一个高效的结构体来存储这些数据,并详细说明如何通过结构体定义风格规范来优化内存使用、提高代码可维护性和执行效率。
19.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
// 定义传感器数据结构体
typedef struct {
    uint64_t timestamp; // 高精度时间戳,64位整数
    union {
        float temperature;
        int humidity;
    } value;
    struct {
        unsigned int flag1 : 1;
        unsigned int flag2 : 1;
        // 其他状态标志位,按需定义
    } status;
} SensorData;

内存使用优化

  1. 时间戳:使用uint64_t明确指定64位整数,避免隐式类型转换带来的内存浪费和潜在错误。
  2. 测量值:采用union来存储不同类型的测量值(温度和湿度),因为同一时间只会使用其中一种,这样可以节省内存空间。
  3. 状态标志位:使用位域(unsigned int flag1 : 1)来定义状态标志,每个标志位只占用1位,大大节省内存。

代码可维护性提高

  1. 清晰的命名:结构体、成员变量命名都采用描述性名称,如timestamptemperaturehumiditystatus等,使代码易于理解。
  2. 结构化组织:将相关数据(测量值、状态标志)分组在不同的成员中,结构清晰,易于维护和扩展。

执行效率提升

  1. 内存对齐:合理的结构体布局和数据类型定义有助于编译器进行内存对齐优化,提高数据访问效率。例如uint64_t时间戳放在开头,满足64位对齐要求。
  2. 位操作优化:对于状态标志位采用位域定义,在进行标志位操作(如设置、读取)时,可以直接使用位操作指令,提高执行效率。