Programowanie w języku Delphi

SizeOf

  • 2006-08-07 00:39
  • 0 komentarzy
  • 2168 odsłon
  • Oceń ten tekst jako pierwszy
SizeOf
Moduł: System

function SizeOf(X): Integer;


Funkcja zwracająca rozmiar podanej zmiennej (lub typu) w bajtach.

Przykład:

var
  B : Byte;
  I : Integer;
begin
  WriteLn(SizeOf(B));  // program wyświetli 1
  WriteLn(SizeOf(I));  // program wyświetli 4
end;


Dzięki tej funkcji możemy zobaczyć również ile miejsca w pamięci zajmuje zadeklarowany przez nas rekord.

Przykład:

type
  TMojRekord = packed record
    B : Byte;
    W : Word;
    I : Integer;
  end;
var
  MojRekord : TMojRekord;
begin
  WriteLn(SizeOf(MojRekord));  // program wyświetli 7
  WriteLn(SizeOf(TMojRekord));  // program również wyświetli 7
end;


Wyjątkiem dla funkcji SizeOf może być próba uzyskania rozmiaru łańcucha znaków String.

Przykład:

var
  S : String;
begin
  S := 'jakiś tekst';
  WriteLn(SizeOf(S));  // program wyświetli 4
  S := 'jakiś inny tekst';
  WriteLn(SizeOf(S));  // program też wyświetli 4
end;


Sytuacja ta jest spowodowana tym, że typ String jest tak naprawdę wskaźnikiem. Wielkość łańcucha możemy sprawdzić tylko wtedy gdy nałożymy na niego ograniczenie długości.

Przykład:

var
  S : String[30];
begin
  WriteLn(SizeOf(S));  // program wyświetli 31
end;


Spytasz pewnie, dlaczego program zwraca wartość 31, a nie 30? Jest to spowodowane tym, że każdy łańcuch typu ShortString (a takim łańcuchem jest łańcuch o określonym maksymalnym rozmiarze) w elemencie o indeksie 0 zawiera liczbę określającą swoją rzeczywistą długość.

Przykład:

var
  S : String[0];
begin
  WriteLn(SizeOf(S));  // program wyświetli 1
end;