[Development] New assign() Functionality Added to Qt Containers

Shawn Rutledge Shawn.Rutledge at qt.io
Wed Sep 6 11:56:51 CEST 2023


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




More information about the Development mailing list