在C++中定义了太多类型是否有任何运行时成本或开销?例如,这两段代码之间是否有任何区别:
int main()
{
int x, y;
double fx, fy;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和:
template<typename T>
struct Point
{
T x, y;
};
int main()
{
Point<int> p;
Point<double> fp;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
想象一下具有许多模板化类型的代码,因此在编译时它会生成更具体的类型:它是否会在运行时产生任何影响?我主要担心的是静态内存消耗.
在典型的实现中,没有vtable的类型几乎是免费的 - 它们在编译时完全不存在,其中成员访问被转换为具有相关偏移的从/到内存的移动.
具有 vtable的类型(因此,带有virtual方法的东西)在静态内存消耗中确实具有O(number_of_types)成本,即每个类型必须具有单独的vtable/RTTI数据,以及dynamic_cast导航复杂类层次结构所需的数据; 在一个典型的实现中,你可以估计这个成本,例如每个virtual方法1个指针+ 1个指向RTTI信息的指针+错位类名的大小+少数连接数据结构的指针dynamic_cast.(除了这种类型的每个实例中的vtable指针的成本之外)