gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:39:42 25 4
gpt4 key购买 nike

在编写了一个 header 并对其进行了(大量)测试之后,我想知道这个 header 的效率如何。 header 基本上所做的是尽可能高效地存储 map 。 Map.SetValue() 存储坐标,Map.GetValue 获取坐标。坐标存储在二维 vector 中,其中四个值存储在一个字符中(每个值有四种可能性)。

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

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 是如何工作的,或者它与类的工作方式不同吗?我搜索了其他有同样问题的人,但找不到适用于我的问题的解决方案。

亲切的问候,危害

注意事项:
我将 map 存储为 unsigned char 类型的二维 vector 。它没有声明为静态的。

最佳答案

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

char bytes [ sizeof(int) ];

将替换为(如果您的编译器/平台上 int 的大小为 4):

char bytes [ 4 ];

关于C++:获取类实例的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37405307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com