Главная страница
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.011 c
15-1244539317
Тимохов_
2009-06-09 13:21
2009.08.09
Как проверить есть ли доступ по TCP порту на компьютер


2-1244833635
al3xey
2009-06-12 23:07
2009.08.09
Форма из DLL в отдельном потоке


15-1244483958
User200902
2009-06-08 21:59
2009.08.09
Поиск лишних гиф и jpg


15-1244535124
SPeller
2009-06-09 12:12
2009.08.09
Кто-нить сталкивался?


2-1244709711
a.a.j.
2009-06-11 12:41
2009.08.09
Место позиции курсора в поле html страницы