[fpc-devel] Managed Types, Undefined Bhaviour
Martok
listbox at martoks-place.de
Fri Jun 29 16:31:17 CEST 2018
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
More information about the fpc-devel
mailing list