C++ 这是使用DLL的好方法吗?(C+;+;?)
我有一个这样运行的系统: main.exe运行sub.exe运行sub2.exe 等等等等等等 那么,将sub和sub2更改为DLL会更快更有效吗C++ 这是使用DLL的好方法吗?(C+;+;?),c++,performance,dll,C++,Performance,Dll,我有一个这样运行的系统: main.exe运行sub.exe运行sub2.exe 等等等等等等 那么,将sub和sub2更改为DLL会更快更有效吗 如果可以的话,有人能告诉我在不改变大量代码的情况下制作DLL的正确方向吗?这取决于它们的运行频率。如果,进程的中断是一个巨大的成本。如果你的程序(main.exe)仅仅是启动与之无关的程序,继续做你正在做的事情。如果sub.exe和sub2.exe包含main.exe将受益的功能,请将它们转换为DLL,以便main.exe可以调用其中的函数 说到效率
如果可以的话,有人能告诉我在不改变大量代码的情况下制作DLL的正确方向吗?这取决于它们的运行频率。如果,进程的中断是一个巨大的成本。如果你的程序(main.exe)仅仅是启动与之无关的程序,继续做你正在做的事情。如果sub.exe和sub2.exe包含main.exe将受益的功能,请将它们转换为DLL,以便main.exe可以调用其中的函数 说到效率,这取决于sub.exe和sub2.exe的大小。请记住,加载dll也意味着开销。dll肯定比单独的可执行文件快。但是将它们分开允许更大的灵活性和重用(想想unixshell脚本) 似乎是一个很好的Win32 DLL教程
至于代码没有太多更改,我假设您只是使用命令行参数将信息传递给这些sub。在这种情况下,只需重命名
main
函数,从DLL中导出它们,然后从主程序中调用这些重命名的“main
”函数。DLL实际上也是可执行的。它们符合PE标准,该标准涵盖了windows的多个常见文件扩展名,如.exe、.dll、.ocx
当你启动两个可执行文件时,它们都有自己的地址空间、内存等等。但是,当加载可执行文件和dll时,dll会加载到可执行文件的进程空间中,因此它们共享很多内容
现在,根据您的3个可执行文件如何一起通信(如果它们甚至一起通信),您可能需要重写一些代码。基本上,拥有dll的一般方法是从程序内部简单地调用dll函数。这通常比进程间通信简单得多有几个因素需要考虑。首先,您多久运行一次该序列,其他可执行文件执行作业的时间有多长?如果您不经常调用它们,并且它们执行的作业不是很短,那么加载时间本身就变得无关紧要了。在这种情况下,我会说,任何适合其他需要的都可以。如果,OTOH,你给他们打了很多电话,我会说让他们成为DLL。加载它们一次,从那时起,每次调用的速度都与对本地函数的调用一样快
至于将exe转换为dll,这应该不是很复杂,但在使用dll时,有一些地方需要特别注意:使用dllmain进行初始化有一些常规main没有的限制(同步问题);您必须记住dll与exe共享地址空间;CRT版本的差异可能会使您感到悲伤。将它们转换为dll,以防止用户在未启动main的情况下意外运行sub1或sub2,不是更安全吗?加载dll的开销比启动exe的开销小得多