3

出于运行时速度的原因#include "randombytes.cpp",而不是randombytes.h在我的项目中使用(randombytes.cpp我的项目源代码目录中的文件在哪里)是一个好主意吗?看起来像这样:randombytes.cpp

#ifndef RANDOMBYTES_INCLUDED
#define RANDOMBYTES_INCLUDED

/* include native headers here */

unsigned char *fetch_random_bytes(int amount);

/* include other parts of my project here if necessary */

unsigned char *fetch_random_bytes(int amount) {
  // do stuff
}

#endif

这也应该适用于需要彼此的文件等等,对吧?您能想到任何情况下这不起作用或我不会获得优化收益吗?

4

2 回答 2

7

这种做法称为“Unity Build”(google it),除了琐碎的项目外,通常不是一个好主意,因为每次进行单个更改时都需要重新编译整个项目,这意味着每次都需要等待几分钟修复一个小错误。

至于运行时性能,速度上的差异与使用 Link Time Optimizations 进行编译并没有太大区别。

于 2012-04-21T15:26:39.170 回答
2

是的,这通常是一种称为“统一构建”的技术,它有助于内联过程(如果编译器足够聪明)。但是,如果您有具有内部链接的重复函数(即:仅存在于 .cpp 中且未在 .h 中声明的函数),则存在缺点,因为这些可能会导致难以调试的编译错误,尽管可以避免具有谨慎和一致的命名约定

一些关于此的阅读:

统一构建的好处/坏处?

http://www.gmixer.com/archives/46

于 2012-04-21T15:27:16.563 回答