0

假设以下代码是为相同目的编写的。程序的其余代码是相同的。
代码1

#include <vector>
using namespace std;
vector<int> vector1;
vector<int> vector2;
vector<int> vector3;
vector<int> vector4;

代码2

 #include <vector>
using namespace std;
vector<int> vector1;
vector<short> vector2;
vector<char> vector3;
vector<bool> vector4;

现在哪个更好(就可执行文件大小而言)?(提示:考虑可执行文件)

我比较了 g++ -S 给出的汇编结果。
令人惊讶的是,第二个程序的行数是 1778 ,第一个是 630。这意味着第一个更好。
为了解释这种行为,我为“如何编译基于模板的程序”寻找了一个很好的资源,但我找不到。

编译器如何将使用模板的程序编译成程序集?你有好的资源吗?(这不是作业,而是在我的工作场所给出的自学问题。你是否觉得不给答案至少将我引导到一个好的资源)

4

1 回答 1

7

您发现的行为一点也不奇怪。编译器使用模板生成尽可能多的类。在您的第一个示例中,它只需要生成一个(vector<int>),而在您的第二个示例中,它需要生成四个。当然,这会生成更多代码。

至于哪个更好的问题:当然,更好地服务于它的目的。但只有你才能知道这一点。

于 2013-01-03T11:59:52.427 回答