Messages in this thread |  | | | Date | Wed, 9 Nov 2005 19:49:32 -0800 (PST) | | From | Vadim Lobanov <> | | Subject | Re: typedefs and structs |
| |
On Wed, 9 Nov 2005, Steven Rostedt wrote:
> 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.
May, but not necessarily will.
> 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.
You're right, however. There's very few cases where such an optimization would be useful, due to register constraints.
> -- Steve > >
-Vadim Lobanov - 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/
|  |