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字节。