4 ms·
The pointer optimization you're talking about is possible in C, because of potential pointer aliasing. Say you have the following sequence: val = [asterix]p1
by phugoid 17y ago
The pointer optimization you're talking about is possible in C, because of potential pointer aliasing. Say you have the following sequence:
val = [asterix]p1
[asterix]p2 = 1
val = [asterix]p1
p2 might actually point to the same location as p1, so you can't avoid fetching from memory the second time.
IIRC volatile means that a variable cannot be optimized away completely, or moved to a register. This is necessary for memory-mapped architectures when you must access memory to communicate with the hardware (as opposed to storing values).
EDIT: trying to get the asterisks to work in this post...
- neilc 17y agop2 might actually point to the same location as p1, so you can't avoid fetching from memory the second time. Not necessarily: if p1 and p2 are of different types (and neither is char * or void *), then the compiler is free to assume that they don't point to the same location. This is called "strict aliasing" per the C99 spec; it breaks a lot of old C code. http://www.cellperformance.com/mike_acton/2006/06/understanding_strict_aliasing.html http://www.cellperformance.com/mike_acton/2006/06/understand... But in any case, this isn't related to "volatile" as such.
- phugoid 17y agoThanks for the correction.