Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
| Date | 2012-03-22 12:01 -0400 |
|---|---|
| From | Kenneth Brody <kenbrody@spamcop.net> |
| Newsgroups | comp.lang.c |
| Subject | Re: addresses of variables |
| References | (9 earlier) <4F6906AC.9000509@verizon.net> <jkdmek$bit$1@dont-email.me> <jkdrfv$bos$1@dont-email.me> <jkeb80$dko$1@dont-email.me> <jkeuhe$3df$1@dont-email.me> |
| Message-ID | <yoidnfL0u6RC0fbSnZ2dnUVZ_r6dnZ2d@bestweb.net> (permalink) |
On 3/22/2012 6:22 AM, James Kuyper wrote:
> On 03/22/2012 12:53 AM, Stephen Sprunk wrote:
>> On 21-Mar-12 19:24, James Kuyper wrote:
>>> On 03/21/2012 06:58 PM, Stephen Sprunk wrote:
>>>> On 20-Mar-12 17:37, James Kuyper wrote:
[... optimizers / address of variables ...]
>>> I don't follow that - why would a situation that renders it unnecessary
>>> to store a variable in addressable memory imply that it's unnecessary to
>>> store it anywhere?
>>
>> Concrete example:
>>
>> int quux(void)
>> {
>> int foo = 42;
>> int *bar =&foo;
>> return foo;
>> }
>>
>> 1. Both foo and bar start out in memory.
>> 2. foo can't be migrated to a register because of the&foo.
>> 3. bar is eliminated via dead code elimination.
>> 4. foo can now be migrated to a register.
>> 5. No address is needed for either foo or bar.
>
> A prime example of a situation where neither foo, nor bar, nor the
> address of foo, are needed.
In fact, foo itself becomes unnecessary. My compiler optimizes this to the
equivalent of "return 42;".
>> OTOH, say you have this:
>>
>> #include<stdio.h>
>> int quux(void)
>> {
>> int foo = 42;
>> int *bar =&foo;
>> printf("%p\n", (void*)bar);
>> return foo;
>> }
>>
>> 1. Both foo and bar start out in memory.
>> 2. foo can't be migrated to a register because of the&foo.
>> 3. bar is migrated to a register.
>> 4. An address is needed for foo but not for bar.
>>
>> Can you give a similar example for what you're describing--and your
>> mental model of what a compiler would do with it?
>
> Yes, the second case you've just given fits what I'm talking about
> exactly. Having recognized that there's absolutely no need to store 42
> anywhere, the compiler reserves an arbitrary address for foo, but never
> bothers storing anything at that address. That address is stored in a
Note that this is only due to the "special knowledge" that the compiler may
have for the printf() function. Had the line been this:
plugh("%p\n", (void *)bar);
instead, then the assumption that the address will never be dereferenced
would be invalid, and the 42 must be stored there.
Note, however, that even with the plugh() call, my compiler has still
eliminated bar entirely, and simply passes &foo directly. (In both cases,
however, my compiler stores the 42.)
> register and passed to printf(), and is used for no other purpose. The
> compiler need only ensure that the address is not used for any other
> object that might have a lifetime that overlaps the call to quux(),
> which is something it would have had to do anyway, if 42 had been stored
> there.
[...]
--
Kenneth Brody
Back to comp.lang.c | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
addresses of variables Zero <chefmuetze@web.de> - 2012-03-18 03:56 -0700
Re: addresses of variables "BartC" <bc@freeuk.com> - 2012-03-18 11:18 +0000
Re: addresses of variables jt@toerring.de (Jens Thoms Toerring) - 2012-03-18 11:18 +0000
Re: addresses of variables pete <pfiland@mindspring.com> - 2012-03-18 07:30 -0500
Re: addresses of variables Zero <chefmuetze@web.de> - 2012-03-18 04:42 -0700
Re: addresses of variables Lowell Gilbert <lgusenet@be-well.ilk.org> - 2012-03-19 10:52 -0400
Re: addresses of variables Stephen Sprunk <stephen@sprunk.org> - 2012-03-19 12:55 -0500
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-19 14:30 -0400
Re: addresses of variables jacob navia <jacob@spamsink.net> - 2012-03-19 20:11 +0100
Re: addresses of variables hoganlong@gmail.com - 2012-03-19 12:17 -0700
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-19 16:15 -0400
Re: addresses of variables hoganlong@gmail.com - 2012-03-19 14:18 -0700
Re: addresses of variables "io_x" <a@b.c.invalid> - 2012-03-19 23:26 +0100
Re: addresses of variables Stephen Sprunk <stephen@sprunk.org> - 2012-03-20 03:52 -0500
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-20 06:00 -0400
Re: addresses of variables Stephen Sprunk <stephen@sprunk.org> - 2012-03-20 16:47 -0500
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-20 18:37 -0400
Re: addresses of variables Stephen Sprunk <stephen@sprunk.org> - 2012-03-21 17:58 -0500
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-21 20:24 -0400
Re: addresses of variables Stephen Sprunk <stephen@sprunk.org> - 2012-03-21 23:53 -0500
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-22 06:22 -0400
Re: addresses of variables Kenneth Brody <kenbrody@spamcop.net> - 2012-03-22 12:01 -0400
Re: addresses of variables Stephen Sprunk <stephen@sprunk.org> - 2012-03-24 16:09 -0500
Re: addresses of variables Jens Gustedt <jens.gustedt@loria.fr> - 2012-03-23 13:41 +0100
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-23 09:06 -0400
Re: addresses of variables Jens Gustedt <jens.gustedt@loria.fr> - 2012-03-23 19:47 +0100
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-23 16:04 -0400
Re: addresses of variables Jens Gustedt <jens.gustedt@loria.fr> - 2012-03-24 00:19 +0100
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-23 22:20 -0400
Re: addresses of variables Jens Gustedt <jens.gustedt@loria.fr> - 2012-03-24 09:39 +0100
Re: addresses of variables Anders Wegge Keller <wegge@wegge.dk> - 2012-03-20 20:02 +0100
Re: addresses of variables James Kuyper <jameskuyper@verizon.net> - 2012-03-20 15:18 -0400
Re: addresses of variables Anders Wegge Keller <wegge@wegge.dk> - 2012-03-21 21:37 +0100
Re: addresses of variables Lowell Gilbert <lgusenet@be-well.ilk.org> - 2012-03-20 11:52 -0400
Re: addresses of variables Kenneth Brody <kenbrody@spamcop.net> - 2012-03-21 11:04 -0400
csiph-web