我可以使用相同的指针来调用来自不同exe文件的数据吗?

时间:2012-03-20 14:03:44

标签: c virtual-memory

我正在尝试在c中创建两个.exe文件,其中第一个在内存中存储一​​些数据并将数据指针保存到.txt。第二个从.txt读取指针并显示它们。

第一个: fw = fopen("pointer.txt", "w"); fprintf(fw, "%p", &data); fclose(fw);

第二个: fr = fopen("pointer.txt", "r"); fscanf(fr, "%p", &pointer);

但是当我运行第二个时,它会显示一个随机数字。

出了什么问题?

5 个答案:

答案 0 :(得分:2)

不,你不应该那样做 该地址在第二个exe运行的过程中可能无效。

每个进程都分配一个地址空间,每个exe都在单独的进程中运行。因此分配给这两个进程的地址空间可能完全不同。

通常,操作系统会回收分配给进程的内存,但是它可能无法回收某些资源,如文件句柄等。因此,一旦第一个进程结束,操作系统将回收分配给该变量的内存。

如果您想在两个活动进程中共享内容(两个进程在您需要进行通信时仍处于活动状态),您需要 Interprocess Communication Mechanism(IPC) ,有各种IPC机制,人们通常会根据性能,流程是否相关或是否需要同步等来选择IPC机制。

如果要跨两个非活动进程共享内容(当您需要在它们之间进行通信时,其中一个进程不活动),则将内容存储在文件中是一个很好的选择想法,但你应该存储内容而不是内存地址。

答案 1 :(得分:2)

进程不在实际内存上运行,而是由系统分配给它们的虚拟内存。因此,来自 P1 0x01111和来自 P2 0x01111不会指向您的RAM的同一扇区。 Ergo,不,你需要使用IPC我想。

答案 2 :(得分:1)

虚拟内存是按进程进行的。请参阅Wikipedia

答案 3 :(得分:1)

您想要做的是什么,但您的方法不正确 - 每个进程都有自己的虚拟地址空间,因此在一个进程中有意义的地址可能不在另一个进程中,并且无论哪种方式都不会引用同样的记忆。

如果你想在这样的进程之间共享资源,你需要让Windows让你。有关详细信息,请参阅此页:http://msdn.microsoft.com/en-us/library/windows/desktop/aa366878%28v=vs.85%29.aspx

答案 4 :(得分:1)

您需要使用IPC机制来实现这一目标。看看http://en.wikipedia.org/wiki/Shared_memory#In_software