[Development] Deprecation/removal model going into Qt 6
Thiago Macieira
thiago.macieira at intel.com
Mon Jun 3 17:52:40 CEST 2019
On Monday, 3 June 2019 06:26:36 PDT Giuseppe D'Angelo via Development wrote:
> > QList::prepend has O(1) amortized and O(n) worst case time complexity.
> > QVector::prepend has O(mn) (always!) time complexity.
> >
> > If you are dealing with a large class or struct, e.g. 800 bytes, then the
> > QVector operations are 100 times slower than the QList ones!
>
> This is just *false*. You're (deliberately?) ignoring the cost of memory
> allocations and deallocations, hiding them in big-O constants, something
> I already warned you about. I won't then waste time debunking this.
Don't forget that QVector is a direct memory access, which is easily predicted
by the CPU, so it can read ahead. If you're iterating (accessing!) the
elements in QList, you're accessing memory that may not be read-ahead, because
it's indirect. It will depend on how the elements were added and the strategy
of the memory allocator.
Also, please consider the memory considerations. If you have 100 elements of
800 bytes, a QVector will allocate 100*800 + 24 bytes (plus 16 of overhead
inside malloc, total 80032 bytes used), whereas QList will allocate 100 * (800
+ 8 + malloc overhead) + malloc overhead, for a total of 82416 bytes, or 3%
more.
Now if your object is 80 bytes instead of 800, the memory usage increase is
29%.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel System Software Products
More information about the Development
mailing list