|

楼主 |
发表于 2012-7-5 21:44:26
|
显示全部楼层
100个房间的例子举的太形象了 。
#include <stdio.h>
int main()
{
char *p1 = "hello";
char *p2 = NULL;
p2 = "hello";
printf("p1: 0x%08x, p2: 0x%08x\n", (int)p1, (int)p2);
//*p1 = 'c';
getchar();
return 0;
}
结果:
p1: 0x00422030, p2: 0x00422030
我想请教:p1 = "hello"这一句执行到底是什么样的过程?
内存不可能事先那么巧就在0x00422030这个地址对应的位置放了一个“hello”,那是不是就要从硬盘读入一个“hello”到内存的某个位置,再把这个地址赋给p1? 但不合理啊,又怎么能保证硬盘中就一定有“hello”,即使有,单单的一句char *p1="hello"就要劳师动众去搜索硕大的硬盘,那是什么场面,所以我得出一个结论,“程序需要访问遍历100个连续的数字,差的系统可能是一个一个的调入内存,好的操作系统可能100个一下子就调入内存”这句话,后半句我理解,但前半句我理解错了,那么应该如何理解呢,求赐教?
我银荡的作出这样的猜测:有一块很小范围的内存只有操作系统才可以调戏,普通的程序动不了它,即“hello”所在的地方,具体范围多大我也不晓得,当程序执行到char *p = "hello"这句时,操作系统就去这块范围搜索,如果遇巧搜索到了,把地址赋给p,如果没搜索到,操作系统在这个范围找一块地址,自己写上“hello”,再把这个地址赋给p,如果我猜测的是对的,那么100个连续的数操作系统也可以这样搞呀,为什么要从硬盘调入?
以上猜的如果是错的,请别见笑,我只是想表达出我想问的问题。
|
|