因为受限于现有项目的逻辑,需要获取一个资源型变量的内存地址,然后在另一个进程中通过内存地址去调取那个资源型变量,找了半天,发现 PHP 中好像没有获取一个变量的内存地址的方法。
因为受限于现有项目的逻辑,需要获取一个资源型变量的内存地址,然后在另一个进程中通过内存地址去调取那个资源型变量,找了半天,发现 PHP 中好像没有获取一个变量的内存地址的方法。
|
estApr 1, 2019
1
写接口啊。
LZ 在 golang 里实现过跨进程直接共享内存里的对象? |
|
changweiApr 1, 2019 via Android
2
我猜楼主没有修过操作系统这门课程?两个进程的地址空间是独立的,无法互相调用。除非开辟共享内存。所以你获取了地址也没什么用。
|
|
changweiApr 1, 2019 via Android
3
如果非要在 php 实现,我建议用 socket 来跨进程获取资源,或者用 swoole,他也内置提供了好几种跨进程交互数据方式。
|
|
misaka19000Apr 1, 2019
4
楼上+1,所以楼主你在想什么?
|
|
xaxbApr 1, 2019 via iPhone
5
shm
|
|
ActraceApr 1, 2019
6
变量地址传递使用 & 操作符,但是不能像 C 或者其他语言那样,用另外一个变量来存这个地址,而是直接镜像那个变量(虽然本质上是一样)。
php 本身的设计思想,就是让你不要碰什么内存地址,专心做上层业务。 跨进程传递资源,如果是全用 PHP 来实现的,可选方法很多,像 shm 之类的都很好用。 简单点的话,其实可以做成单进程多线程( pthread 库)的程序,这样变量共享会轻松很多。 |
|
zjyl1994Apr 1, 2019
7
你什么语言都不可以取地址然后在别的进程里使用啊,建议封装一套接口让别人调用
|
|
UFc8704I4Bv63gy2Apr 1, 2019 via Android
8
跨进程共享数据,一般的方案有 共享内存 临时文件 socket 管道,在 windows 上还有消息机制
显然你努力的方向错了 |
|
lolizeppelinApr 1, 2019
9
你觉得要是能实现的话,操作系统里的进程得崩得有多快....
|
|
kernelreloadApr 1, 2019 via iPhone
10
@changwei 跨进程读写没有问题,而且 LZ 用 go 实现了,作为 workaround 原理上是没有问题的,只是稳定性需要调。参考游戏外挂的基本原理,别说 ring3 下的读写了,ring0 都能搞。
|
|
d5nApr 1, 2019 via iPhone
11
你朋友问你几点了,你本可以看一眼手表告诉他时间,但你非要朋友来抓住你的手自己看。
|
|
RekklesApr 1, 2019
12
很好笑的笑话 |
|
zjsxwcApr 1, 2019
13
操作系统基础啊
|
|
4DAX07B8Kle4Dm6TApr 1, 2019 via iPhone
14
好笑吗?🤭
|
|
yoshiyukiApr 1, 2019
15
建议发一下你用 GOLANG 实现的例子,这样大家比较方便确认 PHP 是否能实现
|
|
whitehackApr 1, 2019
16
@changwei 我猜层主没有了解过 windows 的 OpenProcess ReadProcessMemory. linux 是否有类似的不了解。
|
|
0ZXYDDu796nVCFxqApr 1, 2019 via Android
17
该补下大学基础课了
|
|
reusApr 1, 2019
18
用 socket 暴露,别做傻事。
PHP 有自动 GC,就算你用什么手段获取到地址,也毫无意义,因为地址可能变…… go 也类似,栈上对象的地址是可能变的,堆上地址未来也不保证不变,拿对象地址给其他进程毫无用处。再说了,各个进程地址是独立的,你给其他进程有啥用。 |
|
CbdyApr 1, 2019
19
你需要了解的东西叫做进程间通信( IPC ),找本 OS 书翻翻吧
|
|
xiaotianhuApr 1, 2019
20
|
|
wdlthApr 1, 2019
21
用 Go 的 Unsafe ?
|
|
baiguanganApr 2, 2019
22
进程之间的内存地址不共享,线程之间可以,所以就算你拿到地址了也没有用。
|
|
chen2019Apr 29, 2019 via Android
23
楼主都说是笑话了
|