常见数据类型:它们是多少字节?

时间:2010-09-11 16:49:26

标签: delphi memory

我想知道多少字节

  • 32位整数

  • ASCII字符(C ++中的字符?)

  • 指针(4个字节?)

使用Delphi,如果它在大多数语言中通常是相同的

另外,上面提到的数据类型是否具有恒定的大小?我的意思是整数0,4,123和32231都具有相同的大小?

4 个答案:

答案 0 :(得分:8)

32位整数总是四个字节,因为1个字节= 8位。

  • Integer是带符号的32位整数,Cardinal是无符号的32位整数。因此,无论它们代表什么值,它们总是占用四个字节。 (事实上​​,简单类型确实具有固定宽度是一个非常重要的事实 - 低级编程实际上取决于此!它甚至是计算机工作方式的基石部分。)

  • 较小的整数类型是Smallint(16位有符号),Word(16位无符号)和Byte(8位无符号)。较大的整数类型是Int64(64位带符号)和UInt64(64位无符号)。

  • Char在Delphi 2009之前是1字节AnsiChar;现在它是一个2字节WideChar

  • Pointer总是4个字节,因为Delphi目前只创建32位应用程序。当它支持64位应用程序时,Pointer将变为8个字节。

  • Delphi中有三种常见的浮点类型。这些是SingleDouble(= Real)和Extended。它们分别占用4,8和10个字节。

调查给定类型的大小,例如Short,只需尝试

即可
ShowMessage(IntToStr(SizeOf(Short)))

参考:

答案 1 :(得分:2)

在C / C ++中,SizeOf(Char)= C / C ++标准要求的1字节。

在Delphi中,SizeOf(Char)依赖于版本(非Unicode版本为1个字节,Unicode版本为2个字节),因此Delphi中的Char更像是C ++中的TChar。

答案 2 :(得分:1)

对于不同的机器可能有所不同,因此您可以使用以下代码来确定整数的大小(用于检查):
cout << "Integer size:" << sizeof(int);

答案 3 :(得分:0)

我不想过多地混淆你,但也存在对齐问题;如果您定义这样的记录,它将取决于编译器的布局结果:

type Test = record
    A: Byte;
    B: Pointer; 
end;

如果使用{$ A1}进行编译,SizeOf(Test)将最终为5,而使用{$ A4}进行编译会得到8(至少在目前的32位Delphi上是这样!) 这里有各种各样的小问题,所以我建议现在忽略这一点,并在需要时阅读an article like this; - )