Reputation:
I have a function which checks if a pattern is inside the provided string. The pattern is predefined and have a lot of them are available eg:
const char* a1 = "apple";
const char* a2 = "Orange";
const char* a3 = "mango";
const char* a4 = "grapes";
...
...
...
const char* an = "Banana";
PS : a1,a2,a3 all are member variables of class FRUIT . And The value assigning is done in constructor. I have the function :
void FindPattern(sample_String, predefined_string)
{
if(strstr(sample_string,predefined_string))
{
do sth...
}
else
do another thing
}
so my doubt is it a better approach to create an enum which denotes the predefstrings(a1 to an) and pass them to the function and in a switch case or something assign the "apple" "orange" values locally. Will this approach use less memory than initializing in constructor?
Upvotes: 1
Views: 232
Reputation: 5116
I'm not quite sure I understand which memory you want to optimize away, here.
Assuming it is the actual members, and their type really is const char*
, these strings are simply pointers to compile-time constants. These constants will (most likely) be placed inside some constant memory area outside of the stack or heap and only "initialized" by the loading of the program into memory, before any execution begins. Hence, there isn't really any memory usage for you to optimize, since the strings need to be stored somewhere in the resulting binaries of your program.
So, the only memory you're actually using for an instance of this class is a single pointer per string. If these pointers will be the same for each instance, you could make them static
, which more clearly shows the intention. If they really do differ between objects, there is no optimization which can be done. In either case, this is such a small amount of memory that it shouldn't have any impact and you're most likely looking at a premature optimization.
Upvotes: 2
Reputation: 15768
If all instances share the same set of a1,a2,...,an
and they are never changed after setting them in the constructor, then it might be a good idea to make them static
members of Fruit
, like this:
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";
The all instances will share the members a1,a2,...,an
without any waste of memory.
Upvotes: 0