#include v / s性能

时间:2011-09-01 09:42:11

标签: language-agnostic

(我根据C ++程序定义了这个程序,因为我在编写C ++程序时遇到了这个问题,但实际问题与语言无关)。

我不得不将char从一个char *缓冲区复制到另一个缓冲区。所以,我没有为#include <cstring>执行strcpy,而是自己写了一小段代码来做同样的事情。

以下是我能想到的想法:

  1. 标准库函数通常是可以找到特定代码的最快实现。
  2. 但是如果你只使用一小部分头文件是不明智的(这就是我认为会发生的事情)。
  3. 我想知道我这样做的正确性,以及可以定义为编码自己的片段的界限,之后应该恢复使用标题。

3 个答案:

答案 0 :(得分:1)

#include - 头文件应该对运行时性能没有影响。当然,它可能会降低编译器的速度。

一个不错的链接器应该只提取它实际需要的部分。

答案 1 :(得分:1)

第一个经验法则是“不要重新发明轮子”。并记住你的轮子可能会更糟:-)(有很好的程序员编写你的编译器提供的轮子。)

但是,是的,如果我必须将整个boost库包含在一个函数中,我会尝试直接从库中复制它: - )

我将补充说,这个问题被标记为“与语言无关”,因此我们不能简单地谈论C / C ++标头和C / C ++库之间的区别。如果我们谈到通用语言,包含外部库可能会产生副作用,甚至是副作用。例如,即使它没有被使用,它也可能会大大减慢程序的启动速度(因为它具有需要在启动时调用的静态初始化程序,或者它引用了需要加载的其他dll /动态库的群集) 。并且它不是第一次在程序启动时出现由其中一个依赖项的静态启动引起的错误:-)

所以最终“它取决于”。我想说如果只需要从BSD源复制一个文件(比方说250-500行)就没有任何大问题,因为可能需要更大的链接到库。

答案 2 :(得分:1)

当您谈论性能时,您想要优化什么?编译时间,二进制/对象的大小,执行速度?

使用标准库具有提高代码可维护性可读性的巨大优势。如果其他人必须审查或修改您的代码,那么使用“标准”方式会好得多。

在调用memcpy()或strncpy()时比在调用MyMemCpy()或MyStringCpy()

时更容易发现错误