使用c++模板的程序编译过程
Compilation process of programs using C++ templates
假设为了相同的目的编写了以下代码。程序的其余代码是相同的。
code1
#include <vector>
using namespace std;
vector<int> vector1;
vector<int> vector2;
vector<int> vector3;
vector<int> vector4;
code2
#include <vector>
using namespace std;
vector<int> vector1;
vector<short> vector2;
vector<char> vector3;
vector<bool> vector4;
现在哪一个更好(让在可执行的大小方面)?(提示:考虑可执行文件)
我比较了g++ -S给出的汇编结果。
令人惊讶的是,第二个程序的行数是1778行,第一个程序是630行。这意味着第一个更好。
为了解释这种行为,我寻找了一个很好的资源来了解"基于模板的程序是如何编译的",但是我找不到。
使用模板的程序如何被编译器编译成程序集?你有好的资源吗?(这不是作业,而是我工作单位给我的一个自习题。如果你觉得不能给出答案,至少告诉我一个好的资源)
您发现的行为一点也不奇怪。编译器使用模板生成任意数量的类。在第一个示例中,它只需要生成一个(vector<int>
),而在第二个示例中,它需要生成四个。当然,这会生成更多的代码。
至于哪一个更好的问题:当然是更好地服务于其目的的那个。但只有你自己知道。
相关文章:
- 这是使用回溯的 nqueen 问题,但我使用了动态 2d 数组,我的程序编译良好,但不返回任何输出
- C ++程序编译错误,找不到/访问文件
- C++程序编译没有问题,但无法运行
- Mongdb C++ 驱动程序编译错误 for document{}.
- 添加类型名会导致程序编译失败
- 将 C 程序更改为 C++ 程序 - 编译错误
- 程序编译,但当分解为函数时实际上不会移动电机
- 如何链接 glib-2.0 库进行 c/c++ 程序编译
- 为什么 gcc 和 clang 为我的程序编译为不同的"const"结果?
- 复数程序编译时的计算方法错误
- qt 命令行应用程序编译
- 程序编译和运行,但一段时间后,它停止使用Typedef关键字在CPP上工作
- QML应用程序编译一个 *form.ui.qml文件,但忽略了关联的.qml文件
- 为什么该程序编译但不显示任何输出
- 分割故障程序编译为共享库,但不静态
- 程序编译,但我认为开关被忽略
- 程序编译后崩溃
- 什么是程序编译中的PIC级别
- 尽管使用不存在的成员,但程序编译
- C++程序编译在 Ubuntu 中失败,但在 MacOSX 中工作