C++ C++;:获取类实例的大小
在编写了一个标题并进行了大量测试之后,我想知道这个标题的效率是多少。标头的基本功能是尽可能高效地存储地图。Map.SetValue()存储坐标,Map.GetValue获取坐标。坐标存储在二维向量中,其中四个值存储在一个字符中(每个值有四种可能性) 我尝试使用以下代码获取类的大小: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;
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不会产生指针对象的大小