C (programming language): Difference between revisions

From David's Wiki
No edit summary
No edit summary
Line 4: Line 4:
===Memory Allocation===
===Memory Allocation===
<code>#include <stdlib.h></code><br>
<code>#include <stdlib.h></code><br>
There are 3 ways to allocate memory in C
There are 2 primary ways to allocate memory in C:
* <code>malloc(bytes)</code> Allocated memory is uninitialized.
* <code>malloc(bytes)</code> Allocated memory is uninitialized.
* <code>calloc(number, bytes)</code> Allocated memory is initialized to 0. Allocates (number * bytes) bytes of memory.
* <code>calloc(number, bytes)</code> Allocated memory is initialized to 0. Allocates (number * bytes) bytes of memory.
* <code>alloca(bytes)</code> [https://stackoverflow.com/questions/1018853/why-is-the-use-of-alloca-not-considered-good-practice Discouraged]
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.<br>
 
{{ hidden | <code>_malloca</code> |
There is also a way to 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]
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>
For automatic garbage collection, use [[C++]] which has smart pointers.
For automatic garbage collection, use [[C++]] smart pointers or Rust instead.


{{ hidden | <code>_malloca</code> |
On Windows you also have:
On Windows you also have:
* <code>_malloca</code>
* <code>_malloca</code>

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.

_malloca