减少内存使用量

时间:2013-01-16 12:34:51

标签: c++ memory

我有一个函数可以检查模式是否在提供的字符串中。该模式是预定义的,并且有很多可用的模式  例如:

  const char* a1 = "apple";
  const char* a2 = "Orange";
  const char* a3 = "mango";
  const char* a4 = "grapes";
  ...
  ...
  ...
  const char* an = "Banana";

PS:a1,a2,a3都是类FRUIT的成员变量。值赋值在构造函数中完成。我有这个功能:

 void FindPattern(sample_String, predefined_string)
  {
     if(strstr(sample_string,predefined_string))
     {
      do sth...
     }
     else
       do another thing

   }

所以我怀疑它是一个更好的方法来创建一个枚举,表示预定义字符串(a1到a)并将它们传递给函数,并在switch case或者在本地分配“apple”“orange”值。这种方法会比在构造函数中初始化使用更少的内存吗?

3 个答案:

答案 0 :(得分:2)

我不太清楚我在这里了解你要优化的内存。

假设它是实际成员,并且它们的类型确实是const char*,这些字符串只是编译时常量的指针。这些常量(很可能)将被放置在堆栈或堆外部的某个常量内存区域内,并且只有在执行开始之前将程序加载到内存中才会“初始化”。因此,优化没有任何内存使用,因为字符串需要存储在某处的程序生成的二进制文件中。

因此,您实际用于此类实例的唯一内存是每个字符串一个指针。如果这些指针对于每个实例都是相同的,那么你可以使它们static,这更清楚地表明了意图。如果它们在对象之间确实存在差异,则无法进行优化。在任何一种情况下,这是一个很小的内存,它不会产生任何影响,你很可能会看到过早的优化。

答案 1 :(得分:0)

没有。无论哪种方式都需要字符串常量。

答案 2 :(得分:0)

如果所有实例共享同一组a1,a2,...,an并且在构造函数中设置它们之后永远不会更改它们,那么最好让它们成为static成员Fruit ,像这样:

class Fruit {
  static const char* const a1;
  static const char* const a2;
  //...
  static const char* const an;
};

// In Fruit.cpp:
static const char* const Fruit::a1 = "apple";
static const char* const Fruit::a2 = "orange";
//...
static const char* const Fruit::an = "banana";

所有实例将共享成员a1,a2,...,an,而不会浪费任何内存。