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?
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.