`
luliangy
  • 浏览: 95131 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

win32内存对齐原则

阅读更多

       1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。

  2、结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行。

  3、结合1、2可推断:当#pragma pack的n值等于或超过所有数据成员长度的时候,这个n值的大小将不产生任何效果。

  Win32平台下的微软C编译器(cl.exefor 80×86)的对齐策略:

  1) 结构体变量的首地址是其最长基本类型成员的整数倍;

  备注:编译器在给结构体开辟空间时,首先找到结构体中最宽的基本数据类型,然后寻找内存地址能是该基本数据类型的整倍的位置,作为结构体的首地址。将这个最宽的基本数据类型的大小作为上面介绍的对齐模数。

  2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);

  备注:为结构体的一个成员开辟空间之前,编译器首先检查预开辟空间的首地址相对于结构体首地址的偏移是否是本成员的整数倍,若是,则存放本成员,反之,则在本成员和上一个成员之间填充一定的字节,以达到整数倍的要求,也就是将预开辟空间的首地址后移几个字节。

  3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要,编译器会在最末一个成员之后加上填充字节(trailing padding)。

  备注:结构体总大小是包括填充字节,最后一个成员满足上面两条以外,还必须满足第三条,否则就必须在最后填充几个字节以达到本条要求。

  4) 结构体内类型相同的连续元素将在连续的空间内,和数组一样。

  5) 如果结构体内存在长度大于处理器位数的元素,那么就以处理器的倍数为对齐单位;否则,如果结构体内的元素的长度都小于处理器的倍数的时候,便以结构体里面最长的数据元素为对齐单位。

分享到:
评论

相关推荐

    C++ 内存对齐原则及作用

    C++ 内存对齐原则及作用 C++ 内存对齐原则及作用 C++ 内存对齐原则及作用

    内存对齐的问题 内存对齐内存对齐

    内存对齐,值得一读的内容, 内存对齐,值得一读的内容, 内存对齐,值得一读的内容, 内存对齐,值得一读的内容,

    内存对齐 详细介绍内存对齐的原理

    关于内存对齐的很详细的解析.内容有什么是内存对齐,为什么需要内存对齐,编译器对内存对齐的处理,栈内存对齐等,并附有验证代码.值得一看.

    内存对齐详解

    详细解读内存对齐原则,通过实例让你完全掌握内存对齐。

    面试题1—内存对齐

    面试的时候内存对齐问的比较多,特从网上总结的面试题1.

    sizeof(结构体)和内存对齐

    sizeof(结构体)和内存对齐 sizeof(结构体)和内存对齐 sizeof(结构体)和内存对齐 sizeof(结构体)和内存对齐

    C中内存对齐

    c语言内存对齐问题的描述,数据在计算机内存中的存储

    内存对齐的规则以及作用 - 蜗牛小居 - C++博客1

    1. re: 内存对齐的规则以及作 2. re: 内存对齐的规则以及作 3. re: 内存对齐的规则以及作 4. re: 内存对齐的规则以及作 5. re: 内

    C++内存对齐

    C++内存对齐是个看似简单,但大家经常容易犯错的地方,本文详细总结了C++内存对齐,尤其是结构体对齐方面的知识,提出了自己理论总结,希望能对读者有参考价值!

    计算机编程时使用到的内存对齐问题解答

    本资源附有本人精心设计的内存对齐PPT以及示例程序,保证您看完本资源后完全掌握内存对齐问题。

    结构体大小-详解内存对齐问题

    该文档提供了详细解决结构体sizeof问题,从结构体内变量所占空间大小,默认内存对齐大小,强制内存对齐方法,变量在内存中布局的详细分析,语言言简意赅,绝无废话,为读者解决了大量寻找书籍的烦恼,读者可以花费几分钟的...

    结构体内存对齐.doc

    结构体内存对齐原则,讲的非常详细,希望能给大家些帮助。

    关于结构体的内存对齐

    关于结构体的内存对齐关于结构体的内存对齐关于结构体的内存对齐

    5分钟搞定内存字节对齐

    写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧.

    c++ 内存对齐的完整文档

    c++ 内存对齐的完整文档 c++ 内存对齐的完整文档 c++ 内存对齐的完整文档

    C++内存分配的对齐规则

    C++里的内存资源对齐规则,从更深刻的角度向大家展示了指针的密码

    深入理解c/c++ 内存对齐

    内存对齐,memory alignment.为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。内存对齐...

    内存对齐规则

    说明: 1.为什么需要内存对齐? 2.总结结构中内存对齐的规则

    内存分配对齐策略

    内存分配对齐策略 学习c/c++内存管理分配机制的同学们,这是一本必看的文档,你懂的

Global site tag (gtag.js) - Google Analytics