MST

星途 面试题库

面试题:C语言结构体对齐与内存优化策略

在一个对内存使用极为敏感的C语言项目中,有如下结构体数组定义: ```c struct Data { char flag; int value1; double value2; short value3; }; struct Data dataArray[1000]; ``` 已知系统的对齐规则:`char`按1字节对齐,`short`按2字节对齐,`int`按4字节对齐,`double`按8字节对齐。为了优化内存占用,你会如何重新排列`Data`结构体的成员顺序?请说明优化前后内存占用的变化,并解释这样调整的原因。
27.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 优化后结构体定义
struct Data { 
    char flag; 
    short value3; 
    int value1; 
    double value2; 
}; 
  1. 优化前后内存占用变化
    • 优化前
      • char占1字节,int占4字节,double占8字节,short占2字节。
      • 由于对齐规则,charint需补齐3字节,int占4字节,double占8字节,doubleshort需补齐6字节,short占2字节。所以一个struct Data结构体大小为(1 + 3)+4 + 8+(6 + 2)=24字节。
      • dataArray[1000]占用内存为24 * 1000 = 24000字节。
    • 优化后
      • char占1字节,short占2字节,无需补齐,int占4字节,无需补齐,double占8字节,无需补齐。一个struct Data结构体大小为1+2 + 4+8 = 15字节,按对齐规则需补齐为16字节。
      • dataArray[1000]占用内存为16 * 1000 = 16000字节。
      • 内存占用减少了24000 - 16000 = 8000字节。
  2. 调整原因
    • 按照对齐规则,尽量将占用字节数小的成员放在前面,占用字节数大的成员放在后面,这样可以减少补齐字节数,从而减少结构体整体的内存占用。在对内存使用极为敏感的项目中,这种优化可以显著节省内存空间。