C++:获取 class 实例的大小

C++: Get size of class instance

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

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

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;
}

(MapStorage Map 生成 class 实例,因为 MapStorage 是 class 的名称)

但是发生的是,这总是打印大小为 20 字节,而在 i = 99 时,大小应至少为 2,5kb(100 平方米,每平方米 100 个值,100*100 = 10 000,每字节 4 个值,10 000/4 = 2 500 字节)。

问题是:我做错了什么?我不明白 sizeof 是如何工作的,还是它与 classes 的工作方式不同?我搜索了其他有同样问题的人,但找不到适用于我的问题的解决方案。

亲切的问候, 伤害

备注:
我将地图存储为 unsigned char 类型的二维向量。它没有声明为静态的。

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

char bytes [ sizeof(int) ];

将替换为(如果 compiler/platform 上 int 的大小是 4):

char bytes [ 4 ];