我有一个类,我想重新组织它以避免填充 我怎样才能做到这一点? 我是否担心功能顺序?
班级是:
class MyClass
{
private:
std::vector<std::pair<char,MyClass>> fils;
std::string etiquette = "";
unsigned int frequence = 0;
void privateFunction1();
void privateFunction2();
void privateFunction3();
public:
MyClass();
void publicFunction1();
void publicFunction2();
void publicFunction3();
};
答案 0 :(得分:4)
正如评论中已经提到的,函数的函数和顺序对于大小并不重要。
在MyClass结构本身中确实不应该有任何填充(或者至少不是在32位系统上,但是你没有提到cpu架构),但是std :: vector和std :: string的内容是在班级的实际结构之外分配。
正如您在this answer中所看到的那样,当您将数据添加到向量中时,向量的内容在分配的连续内存中,除非您设置容量,否则可能会有很多开销 - 所以<{1}} MyClass中的std :: vector数据可能会增加额外的开销。
唯一可以省去填充的结构可以保存在capacity()
中..你没有说明你在std :: vector中有多少元素,但是如果几乎每一个都有可能的char(即差不多256),既然你担心总内存消耗,那么你可能最好使用
std::pair<char, MyClass>
而不是
MyClass *fils[256];
因为您不再需要管理向量的容量以获得确切的空间,并且在填充时与std ::对的开销大致相同。
此外,我系统上空std :: string的开销是32字节,因此根据您在 std:vector< std:pair<char, MyClass> > fils
中保留的内容,您可能也想重新考虑这一点 - 例如{{} 1}}在MyClass的不同实例中,你可能希望找到一种方法来保存一组唯一的值,只需一个指向MyClass的指针到唯一的etiquette
因人而异。