C (programming language): Difference between revisions
No edit summary |
No edit summary |
||
Line 9: | Line 9: | ||
Memory allocated by <code>malloc</code> and <code>calloc</code> are on the heap and should be deallocated by <code>free</code> when no longer used to avoid memory leaks. | Memory allocated by <code>malloc</code> and <code>calloc</code> are on the heap and should be deallocated by <code>free</code> when no longer used to avoid memory leaks. | ||
{{ hidden | <code> | {{ hidden | <code>alloca</code> | | ||
There is also a way to allocate memory on the stack. | There is also a way to dynamically allocate memory on the stack. | ||
* <code>alloca(bytes)</code> Usage is [https://stackoverflow.com/questions/1018853/why-is-the-use-of-alloca-not-considered-good-practice Discouraged] | * <code>alloca(bytes)</code> Usage is [https://stackoverflow.com/questions/1018853/why-is-the-use-of-alloca-not-considered-good-practice Discouraged] | ||
Memory allocated by <code>alloca</code> is allocated on the stack and will automatically be freed. Do not call <code>free</code> on this memory. Do not allocate more than a few bytes using <code>alloca</code> or you will risk a stack overflow leading to undefined behavior.<br> | Memory allocated by <code>alloca</code> is allocated on the stack and will automatically be freed. Do not call <code>free</code> on this memory. Do not allocate more than a few bytes using <code>alloca</code> or you will risk a stack overflow leading to undefined behavior.<br> |
Revision as of 20:23, 9 February 2021
C is the low-level programming language taught in UMD's CMSC216 class.
Usage
Memory Allocation
#include <stdlib.h>
There are 2 primary ways to allocate memory in C:
malloc(bytes)
Allocated memory is uninitialized.calloc(number, bytes)
Allocated memory is initialized to 0. Allocates (number * bytes) bytes of memory.
Memory allocated by malloc
and calloc
are on the heap and should be deallocated by free
when no longer used to avoid memory leaks.
alloca
There is also a way to dynamically allocate memory on the stack.
alloca(bytes)
Usage is Discouraged
Memory allocated by alloca
is allocated on the stack and will automatically be freed. Do not call free
on this memory. Do not allocate more than a few bytes using alloca
or you will risk a stack overflow leading to undefined behavior.
For automatic garbage collection, use C++ smart pointers or Rust instead.
On Windows you also have:
_malloca
_calloca
These are not portable so I wouldn't use them. They are a safer version of alloca
which allocates to the heap if there isn't enough stack space. However, you need to free them using _freea
which eliminates the main benefit of alloca
.
As far as I can tell, the only benefit is to prevent heap fragmentation.