[fpc-pascal] Turbo Pascal and Object Pascal ways of OOP

Marc Weustink marc at dommelstein.net
Tue Feb 5 23:25:57 CET 2008


Vinzent Hoefler wrote:
> On Tuesday 05 February 2008 12:02, Tiziano De Togni wrote:
> 
>> Michael Van Canneyt ha scritto:
>>> The advantage is mainly that you can have objects on the stack.
>> sorry, but don't understand exactly what this means exactly.
> 
> The main difference is here:
> 
> -- 8< --
> procedure Uses_Objects;
> var
>    My_Object : tMyObject;
>    My_Class  : tMyClass;
> begin
>    My_Object.Init;
>    My_Class := tMyClass.Create;
> end {Uses_Objects};
> -- 8< --
> 
> The memory allocation for the class can fail due to resource exhaustion 
> and also is infinitely slower than the allocation for the object, which 
> is there as soon as the procedure has been entered. On assembly level, 
> it is only a different constant that the stack pointer is moved to make 
> space for the local variables.
> 
> Referencing an instance being on the stack may also be a bit faster than 
> referencing an instance being on the heap, because there's one level of 
> dereference less, and it may be even more cache-friendly, because the 
> stack is more likely to be in the cache already than a (newly) 
> allocated memory block.
> 
> Meaning: Memory space and execution speed is more or less known 
> beforehand and potential memory fragmentation problems are avoided.
> 
> Oh, and one thing more: No access violations when referencing an invalid 
> (not yet initialized) instance. ;)

Another difference, the memory of a class is zeroed on creation. This 
means that all membervars have the value of 0/nil, where for an object 
only automated member types are initialized.

Marc




More information about the fpc-pascal mailing list