On Wed, Jun 18, 2008 at 09:41:26AM -0700, Joe Buck wrote: > On Tue, Jun 17, 2008 at 08:51:24PM -0700, Karen Shaeffer wrote: > > I see your point. My sticking point is that the process is actually > > running on a physical machine. > > And that's the problem. You, like many C programmers, have in your head a > physical machine model where pointer variables are physical machine > addresses and other variables are physical memory locations. But C > doesn't necessarily work that way (except at -O0); if it did, programs > would run substantially slower. The compiler can make optimizations (like > reusing values in registers) in certain circumstances. Anywhere in the > standard where you see that a behavior is undefined, read that as meaning, > the compiler is allowed to produce an arbitrary code sequence, so it will > produce the fastest, or smallest, or simplest-to-implement sequence. > > > And the addresses, although virtual, > > do translate to a unique physical memory location. And, the value > > stored in that location cannot be 0 and 5 at the same time. > > Right, but since it's const, the compiler is allowed to assume that it > is, well, const! That means that if it has already read the value into > a register, it can assume that the register is still valid for the > remainder of the program execution, even if you decide to violate the > rules of C and change the "constant". That's why it appears to be > 0 and 5 at the same time. > > To get rid of that behavior, you'd have to force the compiler to read > every variable from memory every time, and not use registers at all.
Thanks Joe, Hahaha. Let's let this thread die. You haven't added anything new that hasn't already been discussed. It's turning into noise. Thanks, Karen -- Karen Shaeffer Neuralscape, Palo Alto, Ca. 94306 [EMAIL PROTECTED] http://www.neuralscape.com