How to get to a class initializer through introspection?
Johannes Pfau
nospam at example.com
Tue Aug 4 10:13:53 UTC 2020
Am Tue, 04 Aug 2020 09:31:16 +0000 schrieb Johan:
> On Tuesday, 4 August 2020 at 02:03:34 UTC, Andrei Alexandrescu wrote:
>> On 8/3/20 10:44 AM, Johan wrote:
>>> On Monday, 3 August 2020 at 13:01:55 UTC, Andrei Alexandrescu wrote:
>>>> Would it be effective to iterate through the .tupleof and initialize
>>>> each in turn?
>>>
>>> Possibly. IIRC, the spec obliges us to initialize the padding
>>> in-between address-aligned members aswell, such that a memcmp works to
>>> compare structs. If that is true, then we have to initialize the
>>> padding aswell and a memcpy would be that much nicer.
>>
>> To play devil's advocate, the padding bytes should not have been
>> changed by user code in the first place :o).
>
> But the memory into which objects are placed will be tainted and thus
> the padding areas will not be the same for each object. (it's the same
> for =void members. All can be incorporated into the initializer
> function, but it's work.)
>
> -Johan
I wonder whether an initial memset + then initializing members may be a
good solution? The compiler backends may be clever enough to optimize the
memset (e.g. if there are no gaps, so it's completely redundant, if there
is a single gap and explicitly filling that gap is more efficient than
zeroing everything, ...).
However, in some cases a memcpy which copies both member initialization
data and padding may be better? I'm not sure how to decide when which
option is better or whether we can somehow have both...
--
Johannes
More information about the Digitalmars-d
mailing list