After the recent optimization that went in despite in stage 4 I wonder
why I never got any feedback for this one.
https://gcc.gnu.org/ml/libstdc++/2019-05/msg00166.html
I forgot to note that this is the simplest reply to an old Paolo's
request to recycle std::deque's "nodes". And this one is abi compatible !
François
On 5/20/19 7:39 AM, François Dumont wrote:
Hi
std::deque is supposed to be like a double-queue that you can attack
from front and back. But currrently its implementation makes it behave
differently when starting from a fresh deque. If push_back then all
goes well, it is copy/move to the current internal 'node'. If
push_front then a new 'node' is created and on next pop_back the
initial node will be deallocated without having ever be used.
This patch changes this behavior. As long as deque is empty we can
play with its state to make it push_back- or push_front-ready. It will
also benefit to the usage of deque in the std::stack.
More generally it could really improve scenario in which deque is
used as queue of elements exchanged between different threads. As you
need to make sure that consumers are faster than producers then your
deque should remain empty most of the time and so this proposed patch
should avoid nodes to be allocated/deallocated all the time.
* include/bits/deque.tcc (deque<>::_M_push_back_aux):
Rotate on current node if deque is empty.
(deue<>::_M_push_front_aux): Likewise.
Tested under Linux x86_64, ok to commit ?
François