Главная страница
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.009 c
3-1225469761
Поросенок Винни-Пух
2008-10-31 19:16
2009.08.09
http get средствами mssql2005


11-1205170252
DJ_UZer
2008-03-10 20:30
2009.08.09
В Мемо


1-1211103643
kas
2008-05-18 13:40
2009.08.09
Импорт MDIChild форм из DLL


15-1244537205
Neket
2009-06-09 12:46
2009.08.09
Классификация БД


11-1204994235
Blackman
2008-03-08 19:37
2009.08.09
[KOL-CE] Есть какие-нибудь библиотеки сжатия для KOL-CE?