调用exe性能成本(与DLL相比)

时间:2016-11-14 07:25:38

标签: c++ performance

我们讨论了在C或C ++代码中使用exe而不是DLL的可能性。这个想法是在某些情况下使用exe并传递参数。 (我猜它相当于以某种方式加载它的主要功能,就好像它是一个DLL) 我们想知道的问题是它是否意味着性能成本(特别是在具有多次迭代的循环中) 我试图查看现有的线程,而没有人回答这个具体的问题。我看到从DLL调用函数的第一次调用开销,但后续调用只需要1或2条指令
对于exe案例,它每次都需要创建一个单独的进程以便它可以运行。(如果我需要打开一个可以打开它的shell,第二个进程,但是从我的研究中我可以做到它没有调用shell)。这个过程创建应该花费一些我猜的性能。此外,我认为exe将每次加载到RAM ,在进程结束时销毁,然后重新加载以进行下一次调用,依此类推。 DLL存在的问题(?) PS:我们在理论层面上讨论的问题比实施问题更多,这是为了学习而提出的问题。

2 个答案:

答案 0 :(得分:1)

与从DLL调用函数相比,运行exe的成本非常高。如果你可以使用DLL,那么如果性能很重要,你就应该这样做。

当然,可能还有其他一些因素需要考虑:例如,当代码中存在一个错误,并且崩溃时,如果是exe,则只是exe下降,而调用者幸存下来,但如果错误在DLL中,调用者也会崩溃。

答案 1 :(得分:0)

显然,DLL会被加载,如果你在很短的时间内多次调用它,它将有一个好处。如果调用之间的时间足够长,则DLL内容可能会从RAM中逐出,并且必须再次从磁盘加载(是的,这很难指定,部分取决于系统上的内存使用情况)。 / p>

然而,可执行文件确实被缓存在内存中,因此加载可执行文件的成本为#34;不是那么大。是的,您必须使用所有相关的内存管理代码创建一个新进程并在最后销毁它。对于一个小的可执行文件,这将是相对较轻的工作,对于大型,复杂的可执行文件,可能需要相当长的时间。

请记住,多次执行相同的程序并不常见 - 编译大型项目或在大量文件上运行某种脚本,只是为了给出一些简单的例子。因此,操作系统开发人员将调整其性能。

显然,"保留RAM中的东西"适用于DLL和EXE - 它是由操作系统完成的基本文件缓存。