结构体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字节。

原创粉丝点击