Hi! On 10/11/2020 18:27, Andrei Golubev wrote:
There's another subtle case when your type has in-class member initializers - or whatever the name is - thus it's not primitive but it really could/should be and you want it to be: https://gcc.godbolt.org/z/3TP83f. This is something I accidentally discovered.
Yes, sure. But also something like QStringView, which is (char16_t*, qsizetype), is a primitive type (assuming all-0 representation for a null pointer).
I'd stay away from classification using std:: type traits, as we want something that cannot automatically be inferred from compilers: in the general case, a compiler cannot know that default construction = memset to 0 (e.g. out of line constructor); and certainly they cannot know about relocatability.
And I don't think that compilers are smart enough already to turn a for
loop that is filling with zeros into a memset, so we need the type info
for this. Or am I wrong?
When profiling, memcpy/memmove resulted into an AVX-based function call
to some internal library function, memset might as well be similar (but
not sure).
NB: for Movable types, we do not simply memset everything to zero, we
call placement-new. It's not quite the same as what QPodArrayOps are
doing, I believe.
Yes, a movable non-primitive type implies that default (value) construction does not set to a 0 bit pattern.
My observation was that we still need the trait because compilers don't seem to optimize bulk-construction of primitive types, not even if they're fully inline.
https://gcc.godbolt.org/z/h5M6er
On the other hand, trivial destruction is already optimized:
https://gcc.godbolt.org/z/dTPsbW
(This gives us some leeway to stop detecting isComplex in destruction paths, and just go with std::destroy unconditionally, simplifying our code.)
Thanks, -- Giuseppe D'Angelo | [email protected] | Senior Software Engineer KDAB (France) S.A.S., a KDAB Group company Tel. France +33 (0)4 90 84 08 53, http://www.kdab.com KDAB - The Qt, C++ and OpenGL Experts
smime.p7s
Description: S/MIME Cryptographic Signature
_______________________________________________ Development mailing list [email protected] https://lists.qt-project.org/listinfo/development
