Garbage Collection Pitfall in C++ but not in D?

Timon Gehr timon.gehr at gmx.ch
Fri Jul 6 09:51:15 PDT 2012


On 07/06/2012 05:39 PM, Alex Rønne Petersen wrote:
> On 06-07-2012 16:07, Denis Shelomovskij wrote:
>> 06.07.2012 17:43, akaz пишет:
>>> Hi,
>>>
>>> Reading about the C++11, I stumbled upon this:
>>>
>>> http://www2.research.att.com/~bs/C++0xFAQ.html#gc-abi
>>>
>>> Specifically (quote):
>>>
>>> int* p = new int;
>>> p+=10;
>>> // ... collector may run here ...
>>> p-=10;
>>> *p = 10; // can we be sure that the int is still there?
>>>
>>> How does the D garbage collector solves (answers) that?
>>>
>>> Thank you.
>>
>> If you are interested in D read this first:
>> http://dlang.org/garbage.html
>>
>> You can find there e.g.:
>> > Do not add or subtract an offset to a pointer such that the result
>> points outside of the bounds of the garbage collected object originally
>> allocated.
>>
>> So `p+=10;` is already "undefined behavior".
>>
>
> I'll just add: Handling this case is basically impossible to do sanely.
> You can't really know what some pointer off the bounds of a managed
> memory region is based on. It could literally be based on any memory
> region in the entire program. You could do heuristics of course, but . . .
>

You could run the program in a dedicated VM. :)


More information about the Digitalmars-d-learn mailing list