Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос, почему пустой экземпляр пустого класса весит 8 байт и как обнилить адресс потока / 5 сообщений из 5, страница 1 из 1
11.04.2021, 13:44
    #40061441
Ildar007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, почему пустой экземпляр пустого класса весит 8 байт и как обнилить адресс потока
Всем привет, такой вопрос почему экземпляр пустого класса весит 8 байт?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes,
  System.Types;

type
  TMyClass = class(TObject)
  public
    //FMyVar : Integer;
    FMyVarOne, FMyVarFree, FMyVarFour : Integer;
    FChar: Char;
    FInt64, FInt64Two: Int64;
    function Summ(const AMyIntOne, AMyIntTwo: Integer): Integer;
  end;

  TMyClassTwo = class(TObject)
  public
  FMyArray : Array [1..1000] of Byte;
  end;

var

  MyObject: TMyClass;
  MyTwoObject: TMyClassTwo;
  LengthMemoryObject: Integer;
  Addr: DWord;

{ TMyClass }

function TMyClass.Summ(const  AMyIntOne, AMyIntTwo: Integer): Integer;
var
  I: Integer;

begin
  Result := AMyIntOne + AMyIntTwo;
end;

begin
  try
    MyObject := TMyClass.Create;
    MyTwoObject := TMyClassTwo.Create;

    LengthMemoryObject := MyTwoObject.InstanceSize;
    //LengthMemoryObject := InstanceSize(TMyClass);
    FreeAndNil(MyObject);
    Addr := DWord(Pointer(MyObject));
    Writeln(IntToStr(LengthMemoryObject));
    Writeln(IntToStr(Addr));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

end.
...
Рейтинг: 0 / 0
11.04.2021, 13:46
    #40061442
Ildar007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, почему пустой экземпляр пустого класса весит 8 байт и как обнилить адресс потока
Ildar007
Всем привет, такой вопрос почему экземпляр пустого класса весит 8 байт?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,
  System.Classes,
  System.Types;

type
  TMyClass = class(TObject)
  public
    //FMyVar : Integer;
    FMyVarOne, FMyVarFree, FMyVarFour : Integer;
    FChar: Char;
    FInt64, FInt64Two: Int64;
    function Summ(const AMyIntOne, AMyIntTwo: Integer): Integer;
  end;

  TMyClassTwo = class(TObject)
  public
  FMyArray : Array [1..1000] of Byte;
  end;

var

  MyObject: TMyClass;
  MyTwoObject: TMyClassTwo;
  LengthMemoryObject: Integer;
  Addr: DWord;

{ TMyClass }

function TMyClass.Summ(const  AMyIntOne, AMyIntTwo: Integer): Integer;
var
  I: Integer;

begin
  Result := AMyIntOne + AMyIntTwo;
end;

begin
  try
    MyObject := TMyClass.Create;
    MyTwoObject := TMyClassTwo.Create;

    LengthMemoryObject := MyTwoObject.InstanceSize;
    //LengthMemoryObject := InstanceSize(TMyClass);
    FreeAndNil(MyObject);
    Addr := DWord(Pointer(MyObject));
    Writeln(IntToStr(LengthMemoryObject));
    Writeln(IntToStr(Addr));
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;

end.



Дополнительно, из чего складывается размер экземпляра объекта класса?
...
Рейтинг: 0 / 0
11.04.2021, 13:50
    #40061445
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, почему пустой экземпляр пустого класса весит 8 байт и как обнилить адресс потока
Ildar007
Всем привет, такой вопрос почему экземпляр пустого класса весит 8 байт?

Указатель на информацию о классе + указатель на монитор.

Ildar007
Дополнительно, из чего складывается размер экземпляра объекта класса?

Размеры полей с учётом выравнивания + по указателю на каждый реализуемый интерфейс.
...
Рейтинг: 0 / 0
11.04.2021, 16:58
    #40061459
Ildar007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, почему пустой экземпляр пустого класса весит 8 байт и как обнилить адресс потока
Kazantsev Alexey, можно про указатель на монитор более подробно?(в гугле не нашел)
...
Рейтинг: 0 / 0
11.04.2021, 17:06
    #40061460
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос, почему пустой экземпляр пустого класса весит 8 байт и как обнилить адресс потока
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос, почему пустой экземпляр пустого класса весит 8 байт и как обнилить адресс потока / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]