c++ - 关于struct data 'getting'的性能

标签 c++ c performance

考虑到从给定结构“获取”数据的两种可能方法时,我对性能影响有疑问。假定“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/

相关文章:

C++使用字符串调用对象成员函数

c - 如何在C中初始化一个列表?

c - 编译器是否在创建目标代码之前生成隐式转换的代码?

c++ - has::std::has_nothrow_default_constructor 被移动/改变了吗?

c++ - MFC MDI CtabView 隐藏/删除不使用的导航控件

c# - 无法让 MFC dll 函数在 .net 中运行

c - 访问二维数组中的元素时出错

php - 什么是 PHP 字符串是否以另一个字符串结尾的最有效测试?

performance - 关于高性能网站和可扩展性的书籍。

mysql - 什么更好 : use find_in_set OR built another table?