Am 29.06.2018 um 16:05 schrieb Michael Van Canneyt: >> The expected output would be 3 Addrefs and 3 Releases. > > I don't get that.
Somewhat current FPC trunk output, annotations added manually: ================================================== Addref: 0022FAA8 Refcount: 1 at 00404961 (by fpc_class_as_intf in GetChainer) Addref: 0022FAA8 Refcount: 2 at 00404223 (by fpc_intf_assign of GetChainer Result) Release: 0022FAA8 Refcount: 2 at 004041F4 (by fpc_intf_decr_ref of GetChainer Result) Chain: 0022FAA8 Addref: 0022FAA8 Refcount: 2 at 00404961 (by fpc_class_as_intf in Chain) Addref: 0022FAA8 Refcount: 3 at 00404223 (by fpc_intf_assign of Chain Result) Release: 0022FAA8 Refcount: 3 at 004041F4 (by fpc_intf_decr_ref of Chain Result) Chain: 0022FAA8 Addref: 0022FAA8 Refcount: 3 at 00404961 Addref: 0022FAA8 Refcount: 4 at 00404223 Release: 0022FAA8 Refcount: 4 at 004041F4 Done: 0022FAA8 fin Release: 0022FAA8 Refcount: 3 at 004041F4 (by fpc_intf_decr_ref at scope end of Test) Release: 0022FAA8 Refcount: 2 at 004041F4 (dito) Release: 0022FAA8 Refcount: 1 at 004041F4 (dito) ================================================== Delphi output (without the stack trace part, because they don't have it): ================================================== Addref: 0205DBE8 Refcount: 1 Chain: 0205DBE8 Addref: 0205DBE8 Refcount: 2 Chain: 0205DBE8 Addref: 0205DBE8 Refcount: 3 Done: 0205DBE8 fin Release: 0205DBE8 Refcount: 3 Release: 0205DBE8 Refcount: 2 Release: 0205DBE8 Refcount: 1 ================================================== Delphi uses a shortcut for "as", and because of their different handling of putting Result in a tempvar, they get away with less internal assignments. 6 LOCK instructions (and associated calls) less. Not a lot by itself, but since we're counting single-digit cycles in other places... -- Regards, Martok _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel