This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
make freed op re-use closer to O(1)
authorTony Cook <tony@develop-help.com>
Tue, 25 Feb 2020 22:51:25 +0000 (09:51 +1100)
committerKarl Williamson <khw@cpan.org>
Mon, 2 Mar 2020 16:50:48 +0000 (09:50 -0700)
commit0bd6eef439e2cdb97b9b64430c17d4f523f75914
tree31bd80d2f25aa6f6f59d56ee498df7ce94e62730
parent0069caf1227609b76a39fd52b9e60cf9385c68f1
make freed op re-use closer to O(1)

previously freed ops were stored as one singly linked list, and
a failed search for a free op to re-use could potentially search
that entire list, making freed op lookups O(number of freed ops),
or given that the number of freed ops is roughly proportional to
program size, making the total cost of freed op handling roughly
O((program size)**2).  This was bad.

This change makes opslab_freed into an array of linked list heads,
one per op size.  Since in a practical sense the number of op sizes
should remain small, and insertion is amortized O(1), this makes
freed op management now roughly O(program size).

fixes #17555
op.c
op.h