关于指针的问题?(100分)

  • 主题发起人 主题发起人 baoling
  • 开始时间 开始时间
B

baoling

Unregistered / Unconfirmed
GUEST, unregistred user!
一个应用中的指针所指的内存地址是相对地址还是绝对地址?在其他应用程序中得
到该指针的值,但取出指针所指的地址的内容却不对,是不是有一个偏移量的问题,
如何解决这个问题?
 
delphi与其他工具编写出来的程序
在代码段、数据段等地址肯定不同
 
Windows下的地址都是相对的,用GlobalLock等函数可能可以解决
 
windows本身有内存保护机制,delphi与c的内存读取不同。但是好想跟汇编的是相似。
 
都是Delphi编出的程序中也不能互相直接用它们的指针,还是有偏移量的问题,
如何找到一个应用程序读入内存的首地址?
 
WIN中每一个进程都在启动时分配到虚拟内存中,仅当需要时才分配物理内存。
所以指针指向的是虚拟内存地址。所以只有指针加内存偏移量才得以存取数据。
 
你在一个程序中用GlobalAlloc分配内存,用GlobalFree释放
传到另一个程序中用GlobalLock锁住使用,用完GlobalUnlock
 
没有什么偏移量的问题
每个进程都以为自己有4G内存,其实是操作系统在骗它们
所以一个进程中的地址在另一个进程中是没有意义的。
建议你看看Windows核心编程一书中关于内存管理及进程管理这两章。
 
每个进程都在自己的线性地址(linear address)内运行,线性地址由操作系统翻译到物理
地址(physical address),物理地址才是内存条上的东东:),所以,不同程序上的相同
线性地址对应的物理地址一般是不一样的。有趣的是,在WIN9X下,线性地址的2G-4G是共享
的,也就是说它们对应的物理地址是一样的,这时,你就可以使用指针在不同进程中指相同
的地址了。
 
多人接受答案了。
 
后退
顶部