Showing posts from January, 2018

Optimizing ARC the hard way

One of the potentially unnecessary ARC triggers is passing a reference counted entity as a parameter. Depending on the parameter's declaration, the compiler might insert transient reference counting code in the prologue and epilogue of the called procedure (function, method).

Parameters passed with the default (value) semantics will trigger the reference counting mechanism. On the other hand, parameters passed as references - declared as var, const, [ref], [weak] or [unsafe] - will not trigger the reference counting mechanism while entering and exiting the procedure.

There is nothing new here. Delphi COW copy-on-write strings are reference counted, and passing strings as const parameters is a commonly used optimization pattern. The same principle applies not only to strings, but also to all other reference counted entities, like dynamic arrays, variants, interface references, anonymous method references, and additionally object references on Delphi ARC compilers.
Why the hard way?…

Optimizing ARC with unsafe references

ARC recognizes two types of references: strong and weak. Strong references are ones that participate in the reference counting mechanism, and weak references are references that do not participate in reference counting.

While there is more than one way of achieving weak references, the ones that conceptually fit into ARC memory management are zeroing weak references. Zeroing weak references are niled (set to zero) when the object instance they point to is destroyed. A combination of strong and zeroing weak references leaves no room for invalid pointers. At all times, you will be dealing with references that are either nil or point to a valid object instance.

Sounds perfect, doesn't it?

Well, at least in theory. In practice, just like reference counting itself adds some small amount of overhead, zeroing weak references add some more. In order to zero out weak references after the object instance they point to is destroyed, the application has to track them at runtime and that can be…

Delphi Memory Management for Classic and ARC Compilers - eBook Update

Due to the popular demand (I believe two or three guys asked for it), we eventually added the Mobi format to the existing PDF and ePub options for the eBook. It's added to the download links for the new orders, but I decided not to send you all the file via email this time. If anyone is interested, just send me a note and I'll reply with the download link.

Make sure you're writing from the same email address you used while ordering the book in the first place! This is intended only for the existing registered owners of the eBook!

If you're looking for the ordering page, here it is:

Order Delphi Memory Management For Classic And ARC Compilers eBook