linux-c-programming.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* constant variable
@ 2004-03-11 11:19 Nasir Simbolon
  2004-03-11 13:42 ` Steven Smith
  0 siblings, 1 reply; 3+ messages in thread
From: Nasir Simbolon @ 2004-03-11 11:19 UTC (permalink / raw)
  To: linux-c-programming

Hi All, 
I just curious. I have the following codes

main()
{
 	const int i=9;          //declare constant  integer variable and initialize
       	int* j=NULL;   		     //declare a pointer to integer
	 j = (int*) &i;         //j point to address of memory i 
 	*j = 3;		     //modify value  of  j point to 

	//Now print the result
	 printf("value of i = %d\n",i);
  	 printf("value of j = %d\n",*j);
	 printf("Address of i = %x\n",&i);
 	 printf("Address of j = %x\n",j);
}
when I compile using gcc version 3.3.2 (Debian) and run, I have the result :

value of i = 9
value of *j = 3
Address of i = bffff8a4
Address of j = bffff8a4

Now, I notice  that j point to address of i BUT they do not  have the same 
value.

Anybody have an explanation?


Regards,

Nasir 


-- 
"timor Domini principium scientia (Prov 1:7)"


^ permalink raw reply	[flat|nested] 3+ messages in thread

* RE: constant variable
@ 2004-03-11 13:28 Sandro Dangui
  0 siblings, 0 replies; 3+ messages in thread
From: Sandro Dangui @ 2004-03-11 13:28 UTC (permalink / raw)
  To: nasir, linux-c-programming


If you look at the generated assembly you will notice that the compiler uses
(in the call printf("value of i = %d\n",i);) the value 9 instead of the
contents of i. I mean, the assembly pushes directly the value 9 to the
stack... It assumes that if you declared a constant it will not be changed.

[]'s

Sandro.


-----Original Message-----
From: linux-c-programming-owner@vger.kernel.org
[mailto:linux-c-programming-owner@vger.kernel.org] On Behalf Of Nasir
Simbolon
Sent: Thursday, March 11, 2004 8:19 AM
To: linux-c-programming@vger.kernel.org
Subject: constant variable


Hi All, 
I just curious. I have the following codes

main()
{
 	const int i=9;          //declare constant  integer variable and
initialize
       	int* j=NULL;   		     //declare a pointer to integer
	 j = (int*) &i;         //j point to address of memory i 
 	*j = 3;		     //modify value  of  j point to 

	//Now print the result
	 printf("value of i = %d\n",i);
  	 printf("value of j = %d\n",*j);
	 printf("Address of i = %x\n",&i);
 	 printf("Address of j = %x\n",j);
}
when I compile using gcc version 3.3.2 (Debian) and run, I have the result :

value of i = 9
value of *j = 3
Address of i = bffff8a4
Address of j = bffff8a4

Now, I notice  that j point to address of i BUT they do not  have the same 
value.

Anybody have an explanation?


Regards,

Nasir 


-- 
"timor Domini principium scientia (Prov 1:7)"

-
To unsubscribe from this list: send the line "unsubscribe
linux-c-programming" in the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: constant variable
  2004-03-11 11:19 constant variable Nasir Simbolon
@ 2004-03-11 13:42 ` Steven Smith
  0 siblings, 0 replies; 3+ messages in thread
From: Steven Smith @ 2004-03-11 13:42 UTC (permalink / raw)
  To: Nasir Simbolon; +Cc: linux-c-programming

[-- Attachment #1: Type: text/plain, Size: 798 bytes --]

>  	const int i=9;
>      	int* j=NULL;
> 	 j = (int*) &i;
>  	*j = 3;

> when I compile using gcc version 3.3.2 (Debian) and run, I have the result :
> 
> value of i = 9
> value of *j = 3
> 
> Now, I notice  that j point to address of i BUT they do not  have the same 
> value.

Probably because of compiler optimisations.  If you've specified that
something is const, then the compiler is perfectly at liberty to
assume that it is.  This means that it can assume the initial value of
i still applies, and so, rather than going to memory for i, it can
just substitute the constant 9 in.  This is likely to be much quicker
at run time.

I can only reproduce this behaviour if I have compiler optimisations
turned on, which adds some more weight to the explanation.

Steven.

[-- Attachment #2: Type: application/pgp-signature, Size: 187 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2004-03-11 13:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-03-11 11:19 constant variable Nasir Simbolon
2004-03-11 13:42 ` Steven Smith
  -- strict thread matches above, loose matches on Subject: below --
2004-03-11 13:28 Sandro Dangui

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).