做单机游戏总是对游戏包的大小有限定,不能压缩图片质量,还有什么好的方法能减小游戏包?
不知道你这个问题是否已经解决, 如果还没有解决的话:我们先来看类对象的存储方式:
对于类对象存储方式一:每个对象中成员变量是不同的,但是调用同一份函数,如果按照此种方式存储,当一个类创建多个对象时,每个对象中都会保存一份代码,相同代码保存多次,浪费空间。
所以计算机选择存储方式设计二,将成员函数放在公共代码区,避免浪费空间。
注意:类对象的大小求解的规则跟结构体内存对齐规则一样
我们知道了类对象是如何存储,接下来我们来求类对象的大小,我们先来看一个例子?
// 类中既有成员变量,又有成员函数
class A1 {
public:
void f1(){}
private:
int _a;
};
// 类中仅有成员函数
class A2 {
public:
void f2() {}
};
// 类中什么都没有---空类
class A3
{};
我们已经知道了类对象的存储方式,可轻松得到类 A1 对象的字节大小,但是我们却不知道 A2 对象的字节大小和 A3 对象的字节大小。我们先来看一条规定。
规定:如果一个类没有成员,那么他的对象需要给1byte进行占位标识对象存在,这1byte不存储有效数据。
这样我们就知道了为什么结果如下图所示。
总结:一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐,注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。