前言
结构数据布局优化(Structure Data Layout Optimizations)是比较成熟也是使用广泛的编译器优化技术,旨在提高数据局部性,减少cache miss。常用的structure optimizations有:结构体拆分(structure spliting)、结构体剥离(structure peeling)、域重组(structure reordering)。
1.结构体拆分
结构体拆分是将结构体中冷的域(不常使用的字段)和热的域(经常访问的字段)拆开,分成多个子结构体,并在原结构体中增加指针域和其它子结构体相连,拆分之后的组件也将分配给寄存器,加快访问速度。示例如下:
typedef struct Node
{
int a;
char ch;
double d;
long l;
int *v;
}node;
// 内存分配
int size = 10;
node *my_node = (node *)calloc(size, sizeof(node));
原结构体拆分后:
typedef struct New_node
{
node_1 *node_hot;
node_2 *node_cold;
}new_node;
typedef struct Node_1
{
int a;
char ch;
double d;
}node_1;
typedef struct Node_2
{
long l