如何强制exe始终从内存加载

时间:2015-12-21 15:16:07

标签: delphi delphi-xe7 compiler-flags

使用标志(基于this post

IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP

IMAGE_FILE_NET_RUN_FROM_SWAP

当可执行文件位于LAN路径或可移动设备中时,可以将可执行文件加载到内存中。

即使exe在本地光盘上,有没有办法实现相同的目标?

我知道没有什么性能提升,但要摆脱光盘"这是一个想法。 我没有在文档中找到这样的编译器选项。

1 个答案:

答案 0 :(得分:6)

  

即使exe在本地光盘上,有没有办法实现相同的目标?

不,没有。没有这样的PE旗帜。人们想象的那将是毫无意义的。为什么要从磁盘上的一个位置复制到另一个位置,然后加载映像副本?

您可以通过IMAGE_FILE_NET_RUN_FROM_SWAPfunction dividedDifferences(X,Y,x) ddMatrix = X' ddMatrix(:,2) = Y' for j=3:length(Y)+3 for i=1:length(Y)+2-j ddMatrix(i,j) = (ddMatrix(i,j-1)-ddMatrix(i+1,j-1))/(ddMatrix(i,1)-ddMatrix(i+j-2,1)) end end disp(ddMatrix) Px = 0 for j=2:length(Y)+1 prd = 1 for i=1:j-2 prd = prd * (x - ddMatrix(i,1)) end Px = Px + ddMatrix(1,j)*prd end disp(Px) endfunction function lagrange(X,Y,x) for i=1:length(Y) l(i)=1 for j=1:length(Y) if i~=j l(i) = l(i)*(x-X(j))/(X(i)-X(j)) end end end disp(l') L=0 for i=1:length(Y) L = L+Y(i)*l(i) end disp(L) endfunction //example instance X = [0 1 5 8] Y = [0 1 8 16.4] x = 7 dividedDifferences(X,Y,x) lagrange(X,Y,x) 来谈论绩效改进,但是您已经错误地解决了问题。使用这些标志时性能会更差。这是因为在映射可执行文件之前必须首先读取整个图像。如果没有这些PE标志,则可以映射图像并仅按需加载。此外,您在交换文件中占用的空间可能会产生负面影响。

您不会使用这些标志来提高性能,因为它们不会提高性能,但会使您的程序启动速度变慢。您使用这些标志来确保可靠性。将映像复制到本地交换文件后,在尝试按需加载部分可执行文件时,您不太可能遇到硬页面错误。