|
发表于 2005-6-5 16:27:35
|
显示全部楼层
呵呵,看我的运行结果
- [root@localhost ccode]# gcc linkaddr.c
- [root@localhost ccode]# ./a.out
- 0xbfffdb9c 0xbfffdb40
- [root@localhost ccode]# ./a.out
- 0xbfffda1c 0xbfffd9c0
- [root@localhost ccode]# ./a.out
- 0xbffff89c 0xbffff840
- [root@localhost ccode]# ./a.out
- 0xbffff81c 0xbffff7c0
- [root@localhost ccode]# ./a.out
- 0xbffff79c 0xbffff740
复制代码Post by nait
理论上用户进程只能的到虚拟地址,物理地址都给os屏蔽了
所以每次运行都应该是一样的
我也试过多次,确实是一样的。
看代码:
- #include <stdio.h>
- int
- main(int argc, char **argv)
- {
- int value;
- char buf[80];
-
- printf ("%p\t%p\n", &value, buf);
- return 0;
- }
复制代码
我的运行结果
- [leo@leo ~]$ gcc x.c [color=DarkOrange]#第一次编译[/color]
- [leo@leo ~]$ ./a.out
- 0xbffff40c 0xbffff3b0
- [leo@leo ~]$ ./a.out
- 0xbffff40c 0xbffff3b0
- [leo@leo ~]$ gcc x.c -O3 [color=DarkOrange] #加优化参数编译[/color]
- [leo@leo ~]$ ./a.out
- 0xbffff3bc 0xbffff3c0
- [leo@leo ~]$ ./a.out
- 0xbffff3bc 0xbffff3c0
- [leo@leo ~]$ ./a.out
- 0xbffff3bc 0xbffff3c0
复制代码
正如斑竹所讲“一个程序已经被编译链接好了,每次运行时,它的地址都不会改变。”
但我加了优化参数后,地址就变了,但同是优化后的程序,运行多次结果还是不会变的 |
|