有什么工具可以优化 C 中的结构大小吗?

ven*_*ngy 5 c optimization

寻找一种以 C 结构作为输入并输出尺寸最小的结构的工具。

例如,给定一个只有 3 个成员的初始结构

struct Book {
   char  title[50];
   char  author[25];
   int   book_id;
};
Run Code Online (Sandbox Code Playgroud)

有6种排列

struct Book1 {
   char  title[50];
   char  author[25];
   int   book_id;
};

struct Book2 {
   char  title[50];
   int   book_id;
   char  author[25];   
};

struct Book3 {
   char  author[25];     
   char  title[50];
   int   book_id; 
};

struct Book4 {
   char  author[25];     
   int   book_id; 
   char  title[50];   
};

struct Book5 {
   int   book_id; 
   char  author[25];     
   char  title[50];   
};

struct Book6 {
   int   book_id; 
   char  title[50];     
   char  author[25];     
};
Run Code Online (Sandbox Code Playgroud)

输出显示 80 字节是最小大小。

Book1 = 80
Book2 = 84
Book3 = 80
Book4 = 84
Book5 = 80
Book6 = 80
Run Code Online (Sandbox Code Playgroud)

我从事的几个项目包含具有 10 多个成员(3628800 个排列)的结构,并且不熟悉结构打包复杂性的编码人员不断添加新成员。

问题

是否有可能有一个工具将结构重构为最佳的最小尺寸?

tst*_*isl 3

假设任何成员的大小是其对齐要求的重数(2 的幂),则可以通过首先放置对齐最严格的成员来找到最佳布局。成员之间不会有内部填充。结构体的总大小将是其成员的总和,四舍五入到第一个成员与最严格对齐的对齐方式,无论如何,这都是下限。