<story><title>Simple, Fast and Safe Manual Memory Management [pdf]</title><url>https://www.microsoft.com/en-us/research/wp-content/uploads/2017/03/kedia2017mem.pdf</url></story><parent_chain></parent_chain><comment><author>Animats</author><text>That&amp;#x27;s very clever.&lt;p&gt;It has most of the problems of garbage collectors that need to know object layout. &amp;quot;(void *)&amp;quot; will break this.&lt;p&gt;They don&amp;#x27;t mention I&amp;#x2F;O. If you have an I&amp;#x2F;O operation in progress, its buffer areas need to be locked. But the object-moving operation is lazy, so that&amp;#x27;s not too bad.  You have to avoid getting into a situation where object-moving gets started, clashes with a pending I&amp;#x2F;O operation, and has to block. But this is Microsoft working on their own runtime, so they can fix I&amp;#x2F;O if needed.</text></comment>
<story><title>Simple, Fast and Safe Manual Memory Management [pdf]</title><url>https://www.microsoft.com/en-us/research/wp-content/uploads/2017/03/kedia2017mem.pdf</url></story><parent_chain></parent_chain><comment><author>7197ghr918hf</author><text>&amp;gt; We guarantee type and memory safety by introducing a
new exception (DanglingReferenceException) with the
following semantics: a dereference to a deleted object
will either succeed &lt;i&gt;as if that very object was not yet
deleted&lt;/i&gt;, or result in a DanglingReferenceException.&lt;p&gt;I would worry about what might happen in a variable-sized object reuse&amp;#x2F;freelist type scheme combined with this allocator. A dangling reference might not contain garbage that allows an attacker to control program flow, while still containing data that is exploitable in other ways.&lt;p&gt;So this is not an entirely safe way to do things. Arguably it would be worth the speedup. But many of the techniques for making this approach safe . . .&lt;p&gt;&amp;gt; such exceptions can be detected with the combination of rigorous testing and support in the allocator for a debug mode that enforces stronger semantics (i.e. exceptions on every dereference to a deleted object) at a higher cost&lt;p&gt;. . . can also be used to test C++. For example, we use &lt;a href=&quot;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;google&amp;#x2F;sanitizers&quot; rel=&quot;nofollow&quot;&gt;https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;google&amp;#x2F;sanitizers&lt;/a&gt; a lot at the office to detect these sorts of errors.&lt;p&gt;Still, an interesting and clever result. Nicely done!</text></comment>