devxlogo

Use Static Allocation for Fixed Size Memory Buffers

Use Static Allocation for Fixed Size Memory Buffers

Imagine you have to write a simple stock quote application that accepts stock symbols and retrieves their current values. Using a std::string object to represent a stock symbol is inefficient because std::string allocates an initial buffer that has 16 to 64 characters, depending on the actual platform. Since a stock symbol never exceeds 6 characters, using std::string to represent a stock symbol is overkill and causes a substantial waste of memory. At this point during the design process, designers often suggest writing a custom string class that handles small strings. This suggestion is a plausible one, but a common design mistake is to let the custom string class allocate memory from the free store. Free store allocation is significantly slow. In addition, remember that even if you allocate a single byte using operator new, the actual cost is much more than a single byte. The system stores internal bookkeeping information in the allocated buffer, which therefore, has to be much larger. On Visual C++, the additional overhead of memory allocation is about 300 (!) bytes in debug mode, regardless of the actual size requested. In other words, allocating a single byte consumes more than 301 bytes! A better design approach is to create a buffer on the stack with the size of the largest possible string. For example:

 class QuoteString{private:  char symbol[6]; //avoid dynamic memory inefficiencies and potential bugspublic:  //

devx-admin

Share the Post: