|
发表于 2005-6-4 17:36:01
|
显示全部楼层
Post by spaced
我明白你的意思,我上面显示的是同一程序的两次运行,其间并没有重新编译。
而且我认为程序每次运行的地址是变化的,因为系统每次给进程分配的地址空间并不一定一样,起码起始地址不一定相同。
理论上用户进程只能的到虚拟地址,物理地址都给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
复制代码
正如斑竹所讲“一个程序已经被编译链接好了,每次运行时,它的地址都不会改变。”
但我加了优化参数后,地址就变了,但同是优化后的程序,运行多次结果还是不会变的 |
|