On 26-07-2016 23:00, Mathias Gaunard wrote:
On 24 July 2016 at 14:44, Benedek Thaler
wrote: Thanks for the feedback, Mathias. You are right. This implementation detail is a consequence of honoring reserve calls:
devector<int> d; d.push_back(1); d.reserve_front(100); d.reserve_back(100);
The reserve back has to keep the front capacity untouched or it breaks the promise of it. This also applies to a series of push_front/pop_backs, for example.
I think it's pretty serious. Consider:
int n;
devector<int> d; d.push_back(0);
for(int i=0; i
You end up with ever growing memory consumption, despite the devector only containing one or two elements at all times.
Mathias, There are arguments for either behavior. devector is modelled after vector, and so it tries to do it like a vector does. And vector doesn't change the capacaity with pop_back(). It's not a circular queue either, and never can be because it promises that the [begin,end) range is one segment. Anyway, Benedek needs a review manager. I could do it, but I think it should not be me as I was his GSOC mentor. kind regards Thorsten