寻找一种以 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 个排列)的结构,并且不熟悉结构打包复杂性的编码人员不断添加新成员。
问题
是否有可能有一个工具将结构重构为最佳的最小尺寸?
假设任何成员的大小是其对齐要求的重数(2 的幂),则可以通过首先放置对齐最严格的成员来找到最佳布局。成员之间不会有内部填充。结构体的总大小将是其成员的总和,四舍五入到第一个成员与最严格对齐的对齐方式,无论如何,这都是下限。