Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.08.09;
Скачать: CL | DM;

Вниз

Память, выделенная под объект, инициализируется нулями?   Найти похожие ветки 

 
SkyN   (2009-06-09 16:48) [0]

Можно ли полагаться на то, что память, выделенная под поля объектов, инициализируется нулями?


 
oldman ©   (2009-06-09 16:52) [1]

полагаться можно


 
Ega23 ©   (2009-06-09 17:03) [2]


class function TObject.InitInstance(Instance: Pointer): TObject;
{$IFDEF PUREPASCAL}
var
 IntfTable: PInterfaceTable;
 ClassPtr: TClass;
 I: Integer;
begin
 FillChar(Instance^, InstanceSize, 0);
 PInteger(Instance)^ := Integer(Self);
 ClassPtr := Self;
 while ClassPtr <> nil do
 begin
   IntfTable := ClassPtr.GetInterfaceTable;
   if IntfTable <> nil then
     for I := 0 to IntfTable.EntryCount-1 do
   with IntfTable.Entries[I] do
   begin
     if VTable <> nil then
       PInteger(@PChar(Instance)[IOffset])^ := Integer(VTable);
   end;
   ClassPtr := ClassPtr.ClassParent;
 end;
 Result := Instance;
end;
{$ELSE}
asm
       PUSH    EBX
       PUSH    ESI
       PUSH    EDI
       MOV     EBX,EAX
       MOV     EDI,EDX
       STOSD
       MOV     ECX,[EBX].vmtInstanceSize
       XOR     EAX,EAX
       PUSH    ECX
       SHR     ECX,2
       DEC     ECX
       REP     STOSD
       POP     ECX
       AND     ECX,3
       REP     STOSB
       MOV     EAX,EDX
       MOV     EDX,ESP
@@0:    MOV     ECX,[EBX].vmtIntfTable
       TEST    ECX,ECX
       JE      @@1
       PUSH    ECX
@@1:    MOV     EBX,[EBX].vmtParent
       TEST    EBX,EBX
       JE      @@2
       MOV     EBX,[EBX]
       JMP     @@0
@@2:    CMP     ESP,EDX
       JE      @@5
@@3:    POP     EBX
       MOV     ECX,[EBX].TInterfaceTable.EntryCount
       ADD     EBX,4
@@4:    MOV     ESI,[EBX].TInterfaceEntry.VTable
       TEST    ESI,ESI
       JE      @@4a
       MOV     EDI,[EBX].TInterfaceEntry.IOffset
       MOV     [EAX+EDI],ESI
@@4a:   ADD     EBX,TYPE TInterfaceEntry
       DEC     ECX
       JNE     @@4
       CMP     ESP,EDX
       JNE     @@3
@@5:    POP     EDI
       POP     ESI
       POP     EBX
end;
{$ENDIF}


 
Юрий Зотов ©   (2009-06-10 15:49) [3]

> SkyN   (09.06.09 16:48)

Если метод InitInstance не перекрыт, то да. А если перекрыт, то инициализируется его кодом.



Страницы: 1 вся ветка

Текущий архив: 2009.08.09;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.008 c
2-1244911018
Б
2009-06-13 20:36
2009.08.09
Зачем для многих Win-структур нужно поле Size?


11-1204664342
=BuckLr=
2008-03-04 23:59
2009.08.09
Вопрос по KOLMediaPlayer


2-1243594194
DevilDevil
2009-05-29 14:49
2009.08.09
Разные результаты StretchBlt


2-1244711390
Petr
2009-06-11 13:09
2009.08.09
Поиск числа


8-1196172352
DeadMeat
2007-11-27 17:05
2009.08.09
Щелчки при воспроизведении звука