Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Dynamically Allocated Static Variable

Posted on 2008-06-09
10
Medium Priority
?
609 Views
Last Modified: 2011-10-03
if i have a function with a static local variable, that's dynamically allocated once:
int funct(void)
{
     static char* buffer = NULL;

     if (!buffer)
          buffer = malloc(SIZESLOW);
}

If there's no explicit free call, and if the process is killed; does this constitute as a leak? When the process is killed, is the heap essentially freed? I guess I'm after an in depth explanation on what happens on a windows platform (i imagine unix would be in the same boat)
0
Comment
Question by:spiffles
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
10 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 21748163
When the process is killed, memory is freed
0
 

Author Comment

by:spiffles
ID: 21748290
And from an efficiency and/or design perspective would you use this kind of allocation?
0
 
LVL 84

Accepted Solution

by:
ozo earned 80 total points
ID: 21748319
If SIZESLOW is unknown until runtime I might use it.
What is the purpose of buffer in your function?
What is the purpose of funct in your program?
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
LVL 15

Assisted Solution

by:efn
efn earned 80 total points
ID: 21748337
It's platform-dependent, not guaranteed by the language.  I believe ozo's answer is correct for most, if not all, current operating systems, but I believe it is not true for some old versions of Windows.

From an efficiency perspective, it's fine.  If you have a good reason for allocating the memory dynamically (e.g., SIZESLOW is not known until run time, as ozo said), it's fine.  If you could just use a statically allocated array, that would be simpler and save you from worrying about whether the memory leaks, so I'd consider that preferable, but not by much.
0
 
LVL 84

Expert Comment

by:ozo
ID: 21748385
> not guaranteed by the language
This is true.  The language specs say nothing about what happens after the program exits.
0
 

Author Comment

by:spiffles
ID: 21748554
Yeah I'm doing some code reviews and was worried about a potential leak since there's no explicit free call. By the sounds of it, it's probably safe for the platform it's deployed on.

Closer inspection reveals SIZESLOW has elements which could be updated after a product restart. There's also a comment about dynamic allocation being used to avoid stack overflow. Anyways thanks ozo, efn for the feedback.

0
 
LVL 3

Expert Comment

by:aphillips
ID: 21756236
This is not specified by the language.  However, I have never heard of any compiler that does not release the memory when the program terminates.

Note that the behaviour is implementation specific but depends on the compiler run-time routines (in cooperation with the operating system in some implementations).

However, one important thing to note is that some run-time libraries may report this as a problem.  For example, Microsoft compilers have for some time been reporting this sort of allocation as a "memory leak" in debug builds, although a one-off allocation is not a "leak" more a "splash".  But if you rely on this reporting to find real memory leaks you may want to free the memory when the program terminates.  In C you can do this by registering a function pointer with atexit().
0
 

Author Comment

by:spiffles
ID: 21766960
Yes atexit would be a good alternative, but since there's no precedence in the existing code based, I probably won't use it.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question