定义类型的成本/开销是多少?

nya*_*108 1 c++ types

在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)

想象一下具有许多模板化类型的代码,因此在编译时它会生成更具体的类型:它是否会在运行时产生任何影响?我主要担心的是静态内存消耗.

Mat*_*lia 5

在典型的实现中,没有vtable的类型几乎是免费的 - 它们在编译时完全不存在,其中成员访问被转换为具有相关偏移的从/到内存的移动.

具有 vtable的类型(因此,带有virtual方法的东西)在静态内存消耗中确实具有O(number_of_types)成本,即每个类型必须具有单独的vtable/RTTI数据,以及dynamic_cast导航复杂类层次结构所需的数据; 在一个典型的实现中,你可以估计这个成本,例如每个virtual方法1个指针+ 1个指向RTTI信息的指针+错位类名的大小+少数连接数据结构的指针dynamic_cast.(除了这种类型的每个实例中的vtable指针的成本之外)