在编写标题并对其进行测试(很多)之后,我想知道这个标题的效率是多少。标题基本上做的是尽可能有效地存储地图。 Map.SetValue()存储坐标,Map.GetValue获取坐标。坐标存储在一个二维向量中,其中四个值存储在一个char中(每个值有四种可能性)。
我尝试使用以下代码来获取类的大小:
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生成类实例,因为MapStorage是类的名称)
但是会发生这样的情况,即始终打印尺寸为20字节,而在i = 99时,尺寸应至少为2,5kb(100平方米,每平方米100个值,100 * 100 = 10 000,每字节4个值,10 000/4 = 2 500个字节)。
问题是:我做错了什么?我不明白sizeof的工作原理,或者它是否与类不同?我做了一些搜索同样问题的其他人,但我找不到适用于我的问题的解决方案。
亲切的问候, 害注释:
我将地图存储为unsigned char类型的2D向量。它没有被声明为静态。
答案 0 :(得分:1)
请注意sizeof
是编译时,而不是运行时。编译时计算的表达式将由编译器替换为sizeof
的结果。这就是原因,你可以这样做:
char bytes [ sizeof(int) ];
将替换为(如果编译器/平台上int
的大小为4
):
char bytes [ 4 ];