我正在考虑将IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP和IMAGE_FILE_NET_RUN_FROM_SWAP PE标志包含到我的可执行文件中。
这样做是为了防止从网络运行可执行文件的客户端偶尔看到异常,例如,当网络卷在休眠后无法重新连接时。到目前为止,我们一直建议客户端从本地连接的卷运行可执行文件。
但是,我对虚拟内存、加载器等的了解还不够,不知道使用这些PE标志会有什么风险。
例如,如果我这样做了,我的可执行文件是否会消耗更多的物理内存,特别是当可执行文件的多个实例同时运行时?
很抱歉,我不能给出更多的潜在风险的例子,但这就是我的问题的本质。我有一种感觉,这样做可能会有缺点,但根本不知道这些缺点是什么。
发布于 2011-08-05 17:22:07
PE加载器与虚拟内存管理器协同工作。简单地说,您的可执行文件并不像请求分页那样加载得太多。当然,还有需求页调出。由于可执行文件是锁定的,并且不会更改,因此可以很好地工作。不需要交换;RAM只包含MRU部分。
PE标志改变了这一点。如果满足条件,则可执行文件未被锁定,并且可能会更改/消失。这意味着VMM必须将其所有页面保存在RAM或交换空间中,即使在启动时也是如此。这是大量的复制和RAM使用,但结果是,网络的丢失不再导致页入错误。当RAM很低时,页面不能被丢弃,而必须保存到交换空间。
特别是,当且仅当满足条件时,这些标志才起作用。IMAGE_FILE_NET_RUN_FROM_SWAP不会影响本地运行的应用程序。因此,在RAM/交换中付出代价的唯一客户是那些选择这样做的客户。
https://stackoverflow.com/questions/6953739
复制相似问题