Caching 缓存对齐数据结构
我想将应用程序中的数据结构与缓存线对齐。下面是一个简单的场景:Caching 缓存对齐数据结构,caching,memory-management,memory-alignment,Caching,Memory Management,Memory Alignment,我想将应用程序中的数据结构与缓存线对齐。下面是一个简单的场景: typedef struct container { int a; int b; } cont __attribute__((aligned(64)); int main() { cont *a; a = malloc( sizeof(cont) * 10); printf("%p", a); return 0; } 在本例中,我认为数组的起始地址将与缓存对齐,即从64字节边界开始。但是打印的地址是0x9
typedef struct container {
int a;
int b;
} cont __attribute__((aligned(64));
int main() {
cont *a;
a = malloc( sizeof(cont) * 10);
printf("%p", a);
return 0;
}
在本例中,我认为数组的起始地址将与缓存对齐,即从64字节边界开始。但是打印的地址是0x9dd008,它没有与64字节边界对齐。我在这个实现中缺少什么吗?您正在从堆中分配,返回的地址由
malloc()
确定。由于代码已编译,编译器无法强制执行请求的地址对齐
如果您尝试在堆栈上分配
cont
,您应该会看到正确的对齐方式。您应该使用posix\u memalign()
来分配具有特定内存对齐方式的内存。在C11中,您还可以使用aligned_alloc()
,这将在其他平台(除posix外)中提供与posix_memalign()
相同的功能 如果你还有任何问题,请告诉我。我很乐意回答。