[Development] New assign() Functionality Added to Qt Containers
Dennis Oberst
dennis.oberst at qt.io
Wed Sep 6 12:16:17 CEST 2023
It's just a placeholder for various function parameters. I used to use (...) but switched to (~) in favor of not being an ambiguity with fold expressions in c++.
________________________
Dennis Oberst
Software Engineer
The Qt Company GmbH
Erich-Thilo-Str. 10
12489 Berlin, Germany
dennis.oberst at qt.io
https://www.qt.io
Geschäftsführer: Mika Pälsi,
Juha Varelius, Jouni Lintunen
Sitz der Gesellschaft: Berlin,
Registergericht: Amtsgericht
Charlottenburg, HRB 144331 B
________________________________
From: Development <development-bounces at qt-project.org> on behalf of Shawn Rutledge via Development <development at qt-project.org>
Sent: Wednesday, September 6, 2023 11:56 AM
To: Qt Development <development at qt-project.org>
Subject: Re: [Development] New assign() Functionality Added to Qt Containers
Sounds efficient.
What is the meaning of the tilde the way you are using it here in operator=(~) ?
> On 6 Sep 2023, at 11:30, Dennis Oberst via Development <development at qt-project.org> wrote:
>
> Hello everyone,
>
> I would like to inform you that we've added assign(~) functionality to the following
> Qt containers:
>
> QVarLengthArray, QList, QByteArray, and QString.
> It is now incorporated into certain non-sharing operator=(~) implementations.
>
> As a quick heads up: assign() offers a convenient way to recycle allocated
> memory, potentially resulting in greater efficiency compared to its
> memory-allocating alternatives.
>
> We observed that the efficiency of QString::operator=(~) could be boosted of up
> to 30%! Here are some benchmarks to support this statement:
>
> (x86_64-little_endian-lp64 shared (dynamic) release build (O3); bygcc 13.2.1, endeavouros ; 13th Gen Intel(R) Core(TM) i9-13900K
>
> benchmarks executed with -perf -iterations 1000000
>
> * The last value at the EOL represent the string size.
>
> QString &operator=(const QByteArray &a) (current)
> 64.3 cycles/iter; 300 instructions/iter; 17 nsec/iter (5)
> 65.8 cycles/iter; 366 instructions/iter; 12 nsec/iter (10)
> 62.9 cycles/iter; 301 instructions/iter; 11.5 nsec/iter (20)
> 61.3 cycles/iter; 315 instructions/iter; 11.1 nsec/iter (50)
> 71.4 cycles/iter; 386 instructions/iter; 13 nsec/iter (100)
> 136.9 cycles/iter; 811 instructions/iter; 24.5 nsec/iter (500)
> 245.8 cycles/iter; 1394 instructions/iter; 42.5 nsec/iter (1'000)
>
> QString &operator=(const QByteArray &a) (before)
> 78 cycles/iter; 399 instructions/iter; 15.3 nsec/iter (5)
> 82.3 cycles/iter; 465 instructions/iter; 15 nsec/iter (10)
> 76.7 cycles/iter; 400 instructions/iter; 14 nsec/iter (20)
> 79.5 cycles/iter; 414 instructions/iter; 14.5 nsec/iter (50)
> 91.4 cycles/iter; 485 instructions/iter; 16.7 nsec/iter (100)
> 189 cycles/iter; 910 instructions/iter; 34.4 nsec/iter (500)
> 320 cycles/iter; 1666 instructions/iter; 56 nsec/iter (1'000)
>
> QString &operator=(const char *ch) (current)
> 70 cycles/iter; 317 instructions/iter; 12 nsec/iter (5)
> 71 cycles/iter; 383 instructions/iter; 12.3 nsec/iter (10)
> 64 cycles/iter; 318 instructions/iter; 11.1 nsec/iter (20)
> 69 cycles/iter; 340 instructions/iter; 12 nsec/iter (50)
> 77 cycles/iter; 419 instructions/iter; 13.5 nsec/iter (100)
> 141 cycles/iter; 899 instructions/iter; 24.4 nsec/iter (500)
> 280 cycles/iter; 1518 instructions/iter; 48.4 nsec/iter (1'000)
>
> QString &operator=(const char *ch) (before)
> 86.7 cycles/iter; 416 instructions/iter; 15 nsec/iter (5)
> 87.8 cycles/iter; 482 instructions/iter; 15.7 nsec/iter (10)
> 82.4 cycles/iter; 417 instructions/iter; 14.3 nsec/iter (20)
> 90.2 cycles/iter; 443 instructions/iter; 15.6 nsec/iter (50)
> 101.4 cycles/iter; 518 instructions/iter; 17.7 nsec/iter (100)
> 204.4 cycles/iter; 994 instructions/iter; 36.5 nsec/iter (500) 337.9 cycles/iter; 1789 instructions/iter; 58.9 nsec/iter (1'000)
>
>
>
> You can find the patch here: https://codereview.qt-project.org/c/qt/qtbase/+/494280
>
> Best,
>
>
> ________________________
> Dennis Oberst
> Software Engineer
>
> The Qt Company GmbH
> Erich-Thilo-Str. 10
> 12489 Berlin, Germany
> dennis.oberst at qt.io
> https://www.qt.io
>
> Geschäftsführer: Mika Pälsi,
> Juha Varelius, Jouni Lintunen
> Sitz der Gesellschaft: Berlin,
> Registergericht: Amtsgericht
> Charlottenburg, HRB 144331 B
>
> --
> Development mailing list
> Development at qt-project.org
> https://lists.qt-project.org/listinfo/development
--
Development mailing list
Development at qt-project.org
https://lists.qt-project.org/listinfo/development
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20230906/a3cbdafc/attachment.htm>
More information about the Development
mailing list