《windows核心编程》中的一段话:
每个进程有它自己的私有地址空间,进程A可能有一个存放在它的地址空间中的数据结构,地址是0x12345678,而进程B则有一个完全不同的数据结构存放在它的地址空间中,地址是0x12345678。当进程A中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程A的数据结构,当进程B中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程B的数据结构。问题:
1.我知道每个进程都有自己的4GB的虚拟地址空间,那这个虚拟地址空间是不是连续的呢?也就是说进程A的虚拟地址空间是0~4G,进程B是4G~8G,是这样吗(如果是,那两个进程都有0x12345678的地址岂不是矛盾)?
如果不是,那也就是A和B都是0~4G的地址空间,那不就是共享的了吗?怎么还会是私有的呢?
2.进程A和B都访问的是0x12345678的内存,为什么数据会不一样呢?
每个进程有它自己的私有地址空间,进程A可能有一个存放在它的地址空间中的数据结构,地址是0x12345678,而进程B则有一个完全不同的数据结构存放在它的地址空间中,地址是0x12345678。当进程A中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程A的数据结构,当进程B中运行的线程访问地址为0x12345678的内存时,这些线程访问的是进程B的数据结构。问题:
1.我知道每个进程都有自己的4GB的虚拟地址空间,那这个虚拟地址空间是不是连续的呢?也就是说进程A的虚拟地址空间是0~4G,进程B是4G~8G,是这样吗(如果是,那两个进程都有0x12345678的地址岂不是矛盾)?
如果不是,那也就是A和B都是0~4G的地址空间,那不就是共享的了吗?怎么还会是私有的呢?
2.进程A和B都访问的是0x12345678的内存,为什么数据会不一样呢?
上海的苏州街
北京的苏州街
虽然都是苏州街,但位置并不一样的
进程的空间都是0-4g,但这是个虚拟的空间而已
但是实际的地址并不一样的
入口不一样得到的就不一样了