内存对齐与自定义类型

一、内存对齐

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的霍山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

  (一)、为什么会有内存对齐?

    1、为了提高程序的性能,数据结构(尤其是栈)应该尽可能的在自然边界上对齐。原因是为了访问未对齐的内存,处理器需要进行两次访问,而访问对齐的内存,只需要一次就够了。这种方式称作“以空间换时间”在很多对时间复杂度有要求问题中,会采用这种方法。

  内存对齐与自定义类型

   由此我们可以明白位段的优点,本来定义了5个成员,需要5个存储单位,但是使用位段后只需要4个存储空间就足够了。

  3、优点:

    但它的成员是一个或多个位的字段,这些不同长度的字段实际上是存储于一个或多个×××变量中,他的优点是能够以较少的内存单元存储数据。位段可以用×××形式输出。

例2:

     struct tagAAA

                {

                  unsigned int a : 1;

                  unsigned int  : 2;           //没有声明变量,但是却指定位段大小,称为占位。

                  unsigned int c : 6;

                  unsigned int d : 4;

                  unsigned int e;             //没有指定位段大小,默认为自身类型的大小

                 }AAA_S;                

             

(七)、联合

  1、联合的声明:

          typedefunionA

           {

                inti;

                charc;

            }A;

  2、联合的特点:

    联合成员之间共用同一块空间。联合的大小等于成员中所占内存最大变量大小。可以用来测大小端。

(八)、枚举:

    1、声明:

           typedefenumA

           {

                   zero,

                   one,

                    two

            }A;

如果没有对枚举成员进行初始化时,则默认枚举成员从0开始依次递增

 注意:

      1、在同一个程序中,不能不能声明同名的枚举类型

      2、在同一个程序中,不同的枚举类型的枚举成员不能同名。

      3、任何枚举的大小都是4

  2、枚举与#define 标识符之间区别:

      1、#define 标识符在预编译期间进行简单替换。枚举类型在编译的时候确定其值。

      2、枚举常量可以调试,#define 标识符不可以。

      3、枚举一次可以定义大量的枚举量。


文章标题:内存对齐与自定义类型
网站网址:http://azwzsj.com/article/pisdde.html