标签:view 总线 字节 成员 避免 性能 效率比较 编译 空间
单字、双字、四字在内存的自然边界上,所以不需要再内存中对齐。
自然边界是指:偶数地址,可以被4整除的地址、可以被8整除的地址;
编译器会默认将结构、栈中的成员数据进行对齐。
这是因为如果未对齐,比如对一个字或者双字操作数跨越了4字节边界,那么就需要两个总线周期来访问内存。从时间角度来看效率比较差。
所以为了提高数据操作的效率,编译器尽量将成员数据进行自然边界对齐。不过这样做会牺牲一定的空间。导致整个结构的尺寸变大。
虽然牺牲了空间,但是提升了性能,所以还是值得的。
有什么办法可以既提高性能,而且节约空间?
就是写结构体的时候尽量使成员自然对齐,而避免编译器进行自动对齐;
例如:
struct TestStruct1{ //不自然对齐
char c1; //1字节
short s; //4字节
char c2; //1字节
int i; //4字节
}
struct TestStruct2{
char ch1; //1字节
char ch2; //1字节
short s; //4字节
int i; //4字节
}
标签:view 总线 字节 成员 避免 性能 效率比较 编译 空间
原文地址:https://www.cnblogs.com/grooovvve/p/12381223.html