Messages in this thread | | | Subject | Re: typedefs and structs | From | Steven Rostedt <> | Date | Wed, 09 Nov 2005 22:39:41 -0500 |
| |
On Wed, 2005-11-09 at 15:40 -0800, Vadim Lobanov wrote: > On Thu, 10 Nov 2005, Andreas Schwab wrote: > > > Vadim Lobanov <vlobanov@speakeasy.net> writes: > > > > > However, if the code is as follows: > > > void foo (void) { > > > int myvar = 0; > > > printf("%d\n", myvar); > > > bar(&myvar); > > > printf("%d\n", myvar); > > > } > > > If bar is declared in _another_ file as > > > void bar (const int * var); > > > then I think the compiler can validly cache the value of 'myvar' for the > > > second printf without re-reading it. Correct/incorrect? > > > > Incorrect. bar() may cast away const. In C const does not mean readonly. > > In that case, I stand corrected. > > Is there any real reason to apply const to pointer targets, aside from > giving yourself a warning in the case you try to write the pointer > target directly? Seems to be a missed opportunity for optimizations > where the coder designates that it's okay to do so.
Actually, where are you going to cache it? In a register? but calling bar() may use that register, so it would be stored on the stack anyway. I doubt that this is a problem with the compiler, since if bar _is_ small, then myvar is most likely already in the processor's cache to begin with, so it wouldn't need to go back out to memory, unless it was modified.
-- Steve
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |