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. :)