https://issues.dlang.org/show_bug.cgi?id=18899
Issue ID: 18899 Summary: destroy is inefficient for small structs Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: enhancement Priority: P1 Component: druntime Assignee: nob...@puremagic.com Reporter: schvei...@yahoo.com When destroy is called on a small struct, it runs code like this: shared static immutable T init = T.init; _destructRecurse(obj); () @trusted { auto dest = (cast(ubyte*) &obj)[0 .. T.sizeof]; auto src = (cast(ubyte*) &init)[0 .. T.sizeof]; dest[] = src[]; } (); Which is WAY overkill for a struct like: struct S { int x; } Using obj = T.init should be done for cases where it's proven to be proper. In other words, no postblit (or disabled postblit). It used to be that this function used typeid, and the initializer within. One of the speedups is if the type is all 0's, then buf[] = 0 can be used. Not sure if there's a mechanism to tell if a type is all zeros, but if it can be done, that would be faster. In addition, maybe using the ubyte array is more efficient in some cases, depending on the size. But I'm not sure. --