一个有关操作系统分配进程内存的问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 16:12:05
以下是一段简单的C程序代码,编译后生成exe。

/* main.c */
#include <stdio.h>

void main()
{
int test = 1379;
printf("value: %d\taddr: 0x%x\n", test, &test);
getchar();
}

当我在电脑A上运行后得到的结果是:value: 1379 addr: 0x12ff7c
当我在电脑B上运行后得到的结果是:value: 1379 addr: 0x1dfeac
当我在电脑C上运行后得到的结果是:value: 1379 addr: 0x3ffaac
......

总之,我的电脑都是XP_SP2,我得到的结论是每个独立的电脑上,操作系统分配的内存地址都不一样,我想请问这是为什么呢,操作系统是怎样分配内存的呢?我的目的是用另一个程序动态修改1379这个值,但是由于每个电脑分配内存地址都不同,所以我不知道怎么实现了。
感谢 飘渺世间天,
请问我有什么办法可以从外部动态的获取此例中1379的内存地址吗?

win32使用的是虚拟内存,所有应用程序都可以在4GB的地址范围内寻址,不同机器上同一个程序中变量的地址不同很正常,就算同一台机器上的不同时间或条件下地址不同也有可能。

反映在应用程序中的地址是操作系统对物理地址的映射值,操作系统会在背后完成物理地址到虚拟内存的转换。

进程间各自的地址是受保护的,只有你将地址分配到公共的区域,才能供两个程序使用,你可以将它分配到内存映射文件上。在windows中,使用函数 CreateFile、CreateFileMapping、MapViewOfFile等三个函数来使用