>

> Incl.   Self.   Called     Function
> 29.78   29.72    26M        SYSTEM_FILLCHAR$formal$INT64$BYTE
> 19.07   19.07    123M       SYSTEM_MOVE$formal$formal$INT64
>  3.63    3.63    70M       SYSTEM_SYSGETMEM_FIXED$QWORD$$POINTER
> ....
>
> The main caller of FillChar function is
> system_TObject_$__NewInstance$$TObject which called Fillchar 26 Million
> times.
>
> NewInstance method in TObject calls InitInstance which is an inline
> function and defined as follows:
>
>       class function TObject.InitInstance(instance : pointer) :
> tobject; {$ifdef SYSTEMINLINE} inline; {$ENDIF}
>
>         begin
>            { the size is saved at offset 0 }
>            fillchar(instance^, InstanceSize, 0);
>            { insert VMT pointer into the new created memory area }
>            { (in class methods self contains the VMT!)           }
>            ppointer(instance)^:=pointer(self);
>            if PVmt(self)^.vIntfTable <> @emptyintf then
>              InitInterfacePointers(self,instance);
>            InitInstance:=TObject(Instance);
>         end;
>
> My question is do we need to call fillchar in InitInstance? Or Is there
> any way to avoid calling InitInstance?

Yes, FillChar is needed, because a class instance is guaranteed to have Bennett initialized with zero before the first constructor is called (this way the fields are basically initialized by 0, Nil or '' depending on the field type).



But still...

Any improvement done in the Creating and Freeing an Objects would be welcome :)

We need the FillChar there, but if the object creation could be optimized even a little bit, it would benefit almost all the code. Some more than others... But still...

-Tee-
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to