=void in struct definition
Stefan Koch
uplink.coder at googlemail.com
Mon Apr 9 11:25:21 UTC 2018
On Monday, 9 April 2018 at 11:15:14 UTC, Stefan Koch wrote:
> On Monday, 9 April 2018 at 11:06:50 UTC, Shachar Shemesh wrote:
>> [ ... ]
>> During the s initialization, the entire "S" area is
>> initialized, including the member arr which we asked to be =
>> void.
>>
>> Is this a bug?
>>
>> Shachar
>
> [ ... ] {This could be fixed, but may break code} [ ... ]
So currently on initalizsation we do this:
---
structPtr = cast(StructType*) alloc(structSize);
memcpy(structPtr, StructType.static_struct_initializer,
StructType.sizeof);
----
which we could change to
---
structPtr = cast(StructType*) alloc(structSize);
foreach(initializerSegment;StructType.InitializerSegments)
{
memcpy((cast(void*)structPtr) +
initializerSegment.segmentOffset,
(cast(void*) initializerSegment.segmentPtr),
initializerSegment.segmentSize);
}
---
This will potentially remove quite a lot of binary bloat since
void-members do no longer need to be stored in initializers, and
initialization overhead.
In terms of implementation this _should_ be straight-forward but
well ... runtime and compiler interaction can be a mess.
More information about the Digitalmars-d
mailing list