寻找一个工具,可以将C结构作为输入,并输出一个最小尺寸的结构体。
对于示例,给定仅有3个成员的初始结构体。
输出结果表明80字节是最小的大小。
对于示例,给定仅有3个成员的初始结构体。
struct Book {
char title[50];
char author[25];
int book_id;
};
有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];
};
输出结果表明80字节是最小的大小。
Book1 = 80
Book2 = 84
Book3 = 80
Book4 = 84
Book5 = 80
Book6 = 80
我参与的一些项目包含有10个以上成员(3628800种排列方式)的结构,并且不熟悉结构打包复杂性的开发人员会不断添加新成员。
问题
是否可能有一个工具来重构结构以获得最佳的最小尺寸?
3,628,800
种排列方式,但由于许多成员具有相同的内存布局(大小、对齐和步幅),因此很多排列方式在内存布局方面是等效的。因此,实际的排列方式数量不是numberOfMembers!
,而是numberOfMembersWithUniqueLayout!
。此外,不需要使用蛮力算法。您可以使用一种懒惰算法,按照从大到小的顺序排列成员,并可靠地获得最佳结果。 - Alexander