码迷,mamicode.com
首页 > 编程语言 > 详细

C++Review18_内存对齐

时间:2020-02-29 01:03:33      阅读:65      评论:0      收藏:0      [点我收藏+]

标签: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字节

}

C++Review18_内存对齐

标签:view   总线   字节   成员   避免   性能   效率比较   编译   空间   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!