C++Review18_内存对齐

单字、双字、四字在内存的自然边界上,所以不需要再内存中对齐。

自然边界是指:偶数地址,可以被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字节

}

猜你喜欢

转载自www.cnblogs.com/grooovvve/p/12381223.html