是否可以将二进制文件加载到内存中而不执行它?

是否可以将二进制文件加载到内存中而不执行它?

就像我每次使用 linux 时都会使用 google chrome(很可能),但我不希望它在我打开它时自动启动。我可以手动打开它,但是我有HDD,所以第一次加载很痛苦,所以我想知道是否有一种方法可以将chrome从HDD加载到RAM而不真正运行它,只需加载并在RAM中缓存。

答案1

我用vmtouch

vmtouch打开命令行上提供的每个文件并将其映射到虚拟内存中mmap(2)。映射以只读方式打开。它递归地爬行任何目录并对在其中找到的所有文件执行相同的操作。

[…]

-t
触摸虚拟内存页面。从文件的每一页读取一个字节。如果该页面未驻留在内存中,则会生成页面错误,并且该页面将从磁盘读取到文件系统的内存缓存中。

注意:虽然保证每个页面都已放入内存,但在命令vmtouch完成时该页面可能会从内存中逐出。

为了克服上述注释所述的问题,我使用vmtouch -l(作为 root):

-l
将页面锁定到物理内存中。此选项的工作原理与此相同,-t只是它调用mlock(2)所有内存映射并且完成后不关闭描述符。抓取结束时,如果成功,vmtouch将无限期阻塞。文件将被锁定在物理内存中,直到vmtouch进程被终止。

我的使用案例是通过相对较慢的网络连接从相对较慢的 NFS 服务器抢先缓存相对较大的媒体文件。它运作得很好。它应该适合你。您只需要识别要加载的文件即可。这个问题可能有用:如何找出运行时加载的动态库可执行文件?

相关内容