[Development] Question about QCoreApplicationData::*_libpaths
Jędrzej Nowacki
jedrzej.nowacki at theqtcompany.com
Wed Jan 20 16:03:00 CET 2016
On Tuesday 19 of January 2016 13:51:56 Marc Mutz wrote:
> On Tuesday 19 January 2016 11:15:43 Milian Wolff wrote:
> > On Dienstag, 19. Januar 2016 11:51:42 CET Marc Mutz wrote:
> > > I missed one:
> > >
> > > On Monday 18 January 2016 23:43:37 Marc Mutz wrote:
> > > > #include <QVector>
> > > > #include <string>
> > > >
> > > > int main() {
> > > >
> > > > QVector<QByteArray> l;
> > > > int oldC = l.capacity();
> > > > for (int i = 0; i < 10000000; ++i) {
> > > >
> > > > char buf[std::numeric_limits<int>::digits + 1];
> > > > sprintf(buf, "%d", i);
> > > > l.push_back(buf);
> > > > int newC = l.capacity();
> > > > if (newC != oldC)
> > > >
> > > > qDebug("%d", newC);
> > > >
> > > > oldC = newC;
> > > >
> > > > }
> > > >
> > > > }
> > > >
> > > > $ time ./test
> > > > <snip>
> > > > real 0m1.769s
> > > > user 0m1.572s
> > > > sys 0m0.192s
> > >
> > > Same with std::vector<QByteArray>:
> > >
> > > real 0m1.776s
> > > user 0m1.616s
> > > sys 0m0.156s
> > >
> > > > best of three runs, core i7-2720QM, GCC 5.3
> > >
> > > Ditto.
> > >
> > > So... is realloc actually the optimisation everyone (incl. me) expected
> > > it to be?
> >
> > Did you run it through a profiler? Where is the time actually spent?
>
> No. It's not the IO, though. Removing the qDebug() and capacity tracking, it
> performs the same, within error margins.
Hi,
I can not reproduce the numbers on gcc version 5.3.1 20151219 (Debian
5.3.1-4). But there is a bug in the benchmark, std::vector and QVector have
different grow model, at least I do not see the same count of qDebug messages.
In addition I think the benchmark may be affected by heap allocation executed
on each l.push_back.
The feature is also used in QVariant which tries to avoid allocations. That
was confirmed as important optimization.
Cheers,
Jędrek
More information about the Development
mailing list