首页 > 编程语言 > 详细

C++Review18_内存对齐

时间:2020-02-29 03:44:59      阅读:38      评论:0      收藏:0      [点我收藏+]

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

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

}

C++Review18_内存对齐

原文:https://www.cnblogs.com/grooovvve/p/12381223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!