如果不改编译选项Delphi的Record默认也是4字节对齐的.
可以用编译开关指定
{$A4+}就是4字节对齐.同理{$A2+}.{$A1+}等.{$A1+}等同于Packed Record
主要容易被忽略的是Delphi的枚举.
C,C++的枚举默认等同于整数.也就是4字节的.
Delphi枚举默认是最小对齐.也就是除非指定枚举值,如果枚举小于255个就一个字节.大于255小于65535就两个字节等.
可以用{$Z4+}这个编译开关把枚举强制按4字节对齐.

在结构体中,成员数据对齐满足以下规则:

a、结构体中的第一个成员的首地址也即是结构体变量的首地址。

b、结构体中的每一个成员的首地址相对于结构体的首地址的偏移量(offset)是该成员数据类型大小的整数倍。

c、结构体的总大小是对齐模数(对齐模数等于#pragma pack(n)所指定的n与结构体中最大数据类型的成员大小的最小值)的整数倍。

位段(也叫位域)这种数据类型在内存中的对齐。一个位域必须存储在同一个字节中,不能跨字节,比如跨两个字节。如果一个字节所剩空间不够存储另一位位域时,应该从下一个字节存放该位域。在满足成员数据对齐的规则下,还满足如下规则:

d、如果相邻位域类型相同,并且它俩位域宽度之和小于它的数据类型大小,则后面的字段紧邻前面的字段存储。

e、如果相邻位域类型相同,但是它俩位域宽度之和大于它的数据类型大小,则后面的字段将从新的存储单元开始,其偏移量为其类型的整数倍。

f、如果相邻位域类型不同,在VC中是不采取压缩方式,但是GCC会采取压缩方式。

http://www.cnblogs.com/toosuo/archive/2012/05/28/2521032.html

delphi的字节对齐的更多相关文章

  1. stm32中字节对齐问题(__align(n),__packed用法)

    ARM下的对齐处理   from DUI0067D_ADS1_2_CompLib 3.13 type  qulifiers 有部分摘自ARM编译器文档对齐部分  对齐的使用:  1.__align(n ...

  2. __packed字节对齐

    比如: typedef __packed struct READ_Command{    u_char code;    u_int addr;    u_char len;} READ_Comman ...

  3. C语言:内存字节对齐详解[转载]

    一.什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问, ...

  4. 字节对齐导致的iOS EXC_ARM_DA_ALIGN崩溃

    本文原链接: http://www.cnblogs.com/zouzf/p/4455167.html 先看一下这个链接:http://www.cnblogs.com/ren54/archive/201 ...

  5. ACE的CDR中的字节对齐问题

    大家应该都知道计算机中间都有字节对齐问题.CPU访问内存的时候,如果从特定的地址开始访问一般可以加快速度,比如在32位机器上,如果一个32位的整数被放在能被32模除等于0的地址上,只需要访问一次,而如 ...

  6. ARM字节对齐问题详解

    一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这 ...

  7. C语言之字节对齐

    在C语言编程中,有时为了达到减少运行的时间的目的,需要浪费一些空间:而有时为了节省空间,使它的运行时间增长.而字节对齐则是为了访问效率,用空间换取时间. 要掌握字节对齐,首先得明确一下四个概念: 1. ...

  8. C ~ C语言字节对齐

    1. 什么是对齐? 现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型 ...

  9. C语言的struct/union字节对齐

    C语言的一大优势就是对内存空间的控制,当然,一般情况下对于开发人员来说都是透明的.看一个始终困扰初学者的问题:字节对齐! 先看四个重要的基本概念:1.数据类型自身的对齐值:对于char型数据,其自身对 ...

随机推荐

  1. [scrapy] 爬了第一页就停止 filtered off site request to

    我碰到这个问题的原因是 allowed_domains 写错了 至于还有没有别的原因就不知道了

  2. (转载)管道命令和xargs的区别(经典解释)

    一直弄不懂,管道不就是把前一个命令的结果作为参数给下一个命令吗,那在 | 后面加不加xargs有什么区别 NewUserFF 写道:懒蜗牛Gentoo 写道:管道是实现“将前面的标准输出作为后面的标准 ...

  3. HDU 2546 饭卡【贪心+01背包】

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. java中的BigInteger

    头文件 import java.io.*; import java.math.*; 读入 Scanner cin = Scann(System.in); while(cin.hasNext()) &l ...

  5. POJ 1044: Date bugs

    题目描述 There are rumors that there are a lot of computers having a problem with the year 2000. As they ...

  6. luogu P1437 [HNOI2004]敲砖块

    三角形向右对齐后 你想打掉一个砖块,那么你必须打掉右上方的三角形,前缀和维护 若是第i列若是k个,那么它右边的那一列至少选了k-1个 f[i][j][k] 表示从后向前选到第 i 列第j个一共打了k次 ...

  7. POJ 3713 Transferring Sylla (三连通图)

    [题目链接] http://poj.org/problem?id=3713 [题目大意] 给出一个图判断是不是三连通图,三连通图的意思是对于图中任意两点, 至少有三条路是可以相互连通的. [题解] 我 ...

  8. C# 事件和Unity3D

    http://zijan.iteye.com/blog/871207 翻译自: http://www.everyday3d.com/blog/index.php/2010/10/04/c-events ...

  9. 集合框架(02)List

    List的类型和特点: ArrayList:底层的数据结构使用的是数组结构.特点:查询的速度很快,但是增删稍慢 线程不同步 LinKedList:底层使用的链表数据结构.特点:增删的速度很快,查询稍慢 ...

  10. symbol(s) not found for architecture arm64

    问题如下:       解决:更改环境 ok   Standard architectures (armv7, arm7s)