真想用也不是不可以,甚至都不用改现在的硬件,改改os kernel和显卡驱动就行。
显卡是一个挂在pcie总线上的设备,也会占用一段虚拟地址空间来做dma,当你设定好映射之后事实上就把一块显存映射到cpu能访问的区域里了,只要os kernel和驱动不给你下绊子,这块区域就可以当作内存用,放数据放代码都随你。
那么为什么现在大家都不这么做呢?主要原因就是慢,显存一般是带宽大延迟高的内存比如GDDR5,主要适用于批量向显卡传递数据,但内存的延迟一般都要很低,否则CPU的运行效率会大打折扣,而且显卡使用PCI总线传递数据,速度相比于内存和CPU之间的专用通道慢很多。
另外还有一个小问题就是DMA映射的地址空间一般都不大且基本固定,也就是说你没办法直接映射全部的显存,只能用类似古老的DOS下overlay的方式,用哪块映射哪块,很不方便。
早期游戏机这么干的太多了,我好像曾经回答过,你在超任里面可以 JMP 到显存里然后再 JMP 到手柄寄存器上,然后现场把游戏改成任意的样子