内存对齐与自定义类型
一、内存对齐
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的霍山网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
(一)、为什么会有内存对齐?
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://myzitong.com/article/pisdde.html