C++ C++;:获取类实例的大小

C++ C++;:获取类实例的大小,c++,class,sizeof,C++,Class,Sizeof,在编写了一个标题并进行了大量测试之后,我想知道这个标题的效率是多少。标头的基本功能是尽可能高效地存储地图。Map.SetValue()存储坐标,Map.GetValue获取坐标。坐标存储在二维向量中,其中四个值存储在一个字符中(每个值有四种可能性) 我尝试使用以下代码获取类的大小: int main() { MapStorage Map; int Coords[2]; int Value; int Size; float Efficiency;

在编写了一个标题并进行了大量测试之后,我想知道这个标题的效率是多少。标头的基本功能是尽可能高效地存储地图。Map.SetValue()存储坐标,Map.GetValue获取坐标。坐标存储在二维向量中,其中四个值存储在一个字符中(每个值有四种可能性)

我尝试使用以下代码获取类的大小:

int main()
{
    MapStorage Map;

    int Coords[2];
    int Value;
    int Size;
    float Efficiency;

    for (int i = 0; i < 100; i += 1){
        for (int x = 0 + 10*i; x < 10 + 10*i; x += 1){
            for (int y = 0; y < 10; y += 1){
                Coords[0] = x;
                Coords[1] = y;
                Value = rand()%4;
                Map.SetValue(Coords, Value);
            }
        }

        Size = sizeof(Map);
        Efficiency = Size/float(i+1);

        std::cout << "Size at " << i+1 << " Square meters: " << Size << ", Effficiency: " << Efficiency << std::endl;
    }

    return 0;
}
intmain()
{
地图存储地图;
国际协调[2];
int值;
整数大小;
浮动效率;
对于(int i=0;i<100;i+=1){
对于(int x=0+10*i;x<10+10*i;x+=1){
对于(int y=0;y<10;y+=1){
坐标[0]=x;
Coords[1]=y;
Value=rand()%4;
Map.SetValue(坐标,值);
}
}
尺寸=尺寸(地图);
效率=尺寸/浮子(i+1);

std::cout请注意,
sizeof
是编译时,而不是运行时。编译时计算的表达式将由编译器替换为
sizeof
的结果。这就是原因,您可以这样做:

char bytes [ sizeof(int) ];
它将被替换为(如果编译器/平台上的
int
的大小为
4
):


请注意,
sizeof
是编译时,而不是运行时。编译时计算的表达式将由编译器替换为
sizeof
的结果。这就是原因,您可以执行以下操作:

char bytes [ sizeof(int) ];
它将被替换为(如果编译器/平台上的
int
的大小为
4
):


请阅读
sizeof
的定义,它会告诉您为什么您的假设有缺陷。什么是
MapStorage
?执行
sizeof(map)
不会给出映射中的项数,只会告诉您对象的大小(包括成员变量和可能的虚拟表以及填充)仅此而已。您认为为什么有一个成员函数?如果术语“大小”意味着其他东西,就像您似乎想要的那样,为什么您认为
sizeof
运算符能够自动从用户定义的类型计算它?指针上的sizeof不会产生指针的大小请阅读
sizeof
的定义,它会告诉你为什么你的假设有缺陷。什么是
MapStorage
?执行
sizeof(map)
不会给出映射中的项数,只会告诉你对象的大小(包括成员变量和可能的虚拟表,以及填充)仅此而已。您认为为什么有一个成员函数?如果术语“大小”意味着其他东西,就像您似乎想要的那样,为什么您认为
sizeof
运算符能够自动从用户定义的类型计算它?指针上的sizeof不会产生指针对象的大小