结构体Record所占内存的大小
来源:互联网 发布:淘宝客高佣接口 编辑:程序博客网 时间:2024/05/22 05:14
TTest = record
c1: char; //1个字节
i1: Integer; //4个字节
c2: char; //1个字节
c3: Char; //1个字节
end;
这个结构如果用sizeof取其占用的内存大小,是多少呢,是1+4+1+1=7么,不是,是4*3 = 12; 这是因为32位编译的时候,默认结构会自动内存对齐(32bit = 4byte)。
如果要想让这个结构占用7个字节的话,必须加上packed关键字。
这也是结构体带packed与不带packed的区别。
如下:
TTest = packed record
c1: char;
i1: Integer;
c2: char;
c3: Char;
end;
此结构体内存所占大小为:7字节。
再附两种情况增加理解:
TTest = record
c1: char;
i1: Integer;
end;
//占用8字节
TTest = record
c1: char;
i1: Integer;
c2: char;
end;
//占用12字节
TTest = record
c1: char;
end;
//占用1字节
//个人认为这个是因为只有单个,所以没有用对齐方式。
____________以上内容转自网络___________________
rec = record
tf: TForm2;
c1: array[1..3] of Char;
c2: array[1..2] of Char;
c3: array[1..5] of Char;
c4: array[1..3] of Char;
c5: array[1..2] of Char;
end;
//rec所占内存大小为20个字节。这里tf所占内存大小为4个字节,后面的是以基础类型Char作为单位(而不是以数组为单位)先合并,满4个字节为一组, 这里共有3组,最后一组不足4个字节的话也算4个字节,所以其大小为:4 + 4 × 3 + 4 × 1 = 20 字节。
rec = packed record
tf: TForm2;
c1: array[1..3] of Char;
c2: array[1..2] of Char;
c3: array[1..5] of Char;
c4: array[1..3] of Char;
c5: array[1..2] of Char;
end;
//packed record的大小事直接加的,沒有采用内存对齐技术,故其所占内存大小为:4+3+2+5+3+2=19字节。
- 结构体Record所占内存的大小
- 内存对齐方式的总结 如何计算结构体所占内存的大小
- 内存对齐方式的总结 如何计算结构体所占内存的大小
- 结构体所占内存
- 结构体所占空间大小的运算
- 类所占内存的大小
- C++对象所占内存的大小
- 空类所占内存的大小
- 空类所占内存的大小
- 空类所占内存的大小
- 空类所占内存的大小
- C/C++结构体所占内存的问题
- 结构体所占内存字节
- YUV各种格式所占的内存的大小总结
- C# 能否获取一个对象所占内存的大小
- sizeof计算对象所占内存的大小详解
- 测试各种类型所占内存的大小
- C# 能否获取一个对象所占内存的大小?
- SQL Server 2008 安装 遇到 WMI 的问题
- VOXEN开源软交换系统 您的最佳选择
- 郁闷中
- C语言文件操作
- 经典谎言
- 结构体Record所占内存的大小
- 初学编程
- Hibernate 用户自定义类型 UserType
- Oracle执行计划解释
- 利用数字签名超越Java Applet的安全限制
- 服装ERP标准化实施总体规范
- 成为Java高手的25个学习要点
- ????
- install oracle on linux