[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: %destructor feedback

From: Tzvetan Mikov
Subject: Re: %destructor feedback
Date: Wed, 7 Dec 2005 21:39:20 -0800
User-agent: KMail/1.7.2

On Wednesday 07 December 2005 04:09 pm, Joel E. Denny wrote:
> I had no idea the C standard made such restrictions on what computations
> you perform with memory addresses.  So the following is invalid C?
>    #include <stdio.h>
>    int main() {
>      int x;
>      printf( "%p\n", (void*)(&x-1) );
>      return 0;
>    }
> I can understand that *dereferencing* a pointer after subtraction might be
> dangerous... (unless you're writing platform-specific code and, in the
> case of autos, know your way around the stack).  But we're not
> dereferencing.

There are architectures where even loading an invalid address in a register 
might cause an error. It is not purely theoretical either.

Imagine that that the program is running on a segmented architecture and 
additionally the segments are validated. BTW, 286 protected mode was exactly 
like that.

On such an architecture decrementing an address could require segment 
adjustment. However since the address in the example already points at the 
beginning of the object, there is no guarantee that there is any valid 
address space before that. So, it could result in loading an invalid segment 
("selector" in 286-speak, IIRC), which would cause an exception => undefined 

(Technically speaking, most 286 protected mode C compilers didn't use segment 
adjustment, so it wasn't a big problem in practice)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]