考虑到从给定结构“获取”数据的两种可能方法时,我对性能影响有疑问。假定“name”变量与“id”的值相关。
假设我有一个结构和枚举如下,
enum GenericId { NONE, ONE, TWO };
struct GenericTypeDefinition {
GenericId id;
const char name[8];
...
};
假设我想获取此结构的名称。很简单,我可以只引用 GenericTypeDefinition 结构的实例并引用(或指向)名称成员。很简单。
现在我的性能问题变得相关了。假设我需要创建数百个这样的实例,所有这些实例都将被锁定到一定数量的名称和每个唯一的 ID。在整个程序中,这些实例将被称为可能的“GenericTypeDefinition”的集合。请记住,“name”的值是相对于“id”的值的。我的问题是,如果我实现如下函数(并从结构中删除名称变量),我是否能够节省一些内存,
struct GenericTypeDefinition { // 'name' is now removed.
GenericId id;
...
};
const char* Definition_ToString(GenericEnum e) {
switch (e) {
case NONE: return "Nothing";
case ZERO: return "Zero is not nothing.";
...
}
我假设会这样,因为我不再需要在我创建的每个结构中存储字符串(长度为 8 个字节)。
如果您需要任何说明,请询问,因为我找不到太多关于这方面的信息。
最佳答案
如果我明白你在问什么,你就是在将冗余数据放入你的结构中。本质上,您可以从结构中的 id 获取结构的名称。但是,您也可以将名称直接存储在结构中。
所以,您是对的——不存储名称将节省内存,因为您不会将名称与每个项目一起存储。代价是一点时间。每次需要时,您都需要调用一个函数来为您提供 id 中的名称。您必须权衡这些权衡以确定哪个更重要。
关于c++ - 关于struct data 'getting'的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21423032/