高级语言中的变量与数组知识解析
1. 高级语言过程与变量对齐
在80x86处理器上,HLA过程 someFunction 和 someFunction3 能生成运行速度最快的代码,因为所有变量都在合适的边界上对齐。而HLA过程 someFunction 和 someFunction2 能在80x86 CPU上生成最紧凑的激活记录,因为激活记录中的变量之间没有填充字节。若在RISC CPU上使用汇编语言编程,可能会选择与 someFunction 或 someFunction3 等效的方式,以便更轻松地访问内存中的变量。
2. 记录与对齐
在高级语言中,记录/结构体存在对齐问题。CPU制造商推广应用二进制接口(ABI)标准,以促进不同编程语言及其实现之间的互操作性。许多较新的编译器遵循这些建议,ABI规范描述了编译器应如何在内存中组织记录或结构体对象的字段。
不同CPU的ABI规则有所不同,通用规则是编译器应将记录/结构体字段对齐到对象大小的倍数偏移处。若相邻字段大小不同,第一个字段的位置可能导致第二个字段的偏移不是其原生大小的倍数,编译器会插入填充字节,将第二个字段推到合适的偏移处。
例如,Intel建议编译器将字节对齐到任意偏移处,字对齐到偶数偏移处,其他对象对齐到4的倍数偏移处。有些ABI建议将64位对象放在记录内的8字节边界上,有些难以访问小于32位对象的CPU,可能建议记录/结构体中所有对象的最小对齐为32位。
从性能和内存使用角度
超级会员免费看
订阅专栏 解锁全文
2274

被折叠的 条评论
为什么被折叠?



