Stu*_*123 5 c++ memory-management memory-alignment
所以我读到当变量在c ++中声明时,如果你想获得最佳的缓存读取,那么内存应该坚持其自然对齐.例:
int a; // memory address should end in 0x0,0x4,0x8,0xC
int b[2]; // 8 bytes 0x0,0x8
int b[4]; // 16 bytes 0x0
Run Code Online (Sandbox Code Playgroud)
但实际上这些变量并不遵循"自然对齐"规则,16字节变量驻留在以0xC结尾的存储器地址中.为什么是这样 ?
自然记忆对齐通常是指各个变量的对齐,而不是变量数组.因此,4字节整数的数组(如上所示)自然地与4字节边界对齐,而不是与16字节边界对齐.
自然内存对齐通常与CPU的加载/存储指令的架构和实现有关,而不是缓存行的大小.CPU不会一次加载整个数组(向量加载除外).因此,CPU并不关心它加载的整数是否是数组的一部分.
矢量加载同时加载小数组,通常会有更严格的对齐要求.例如,为了在x86上执行对齐向量加载,项必须对齐到16个字节.
| 归档时间: |
|
| 查看次数: |
2913 次 |
| 最近记录: |