Skip to content

Commit

Permalink
doc/static-vs-dynamic-memory: style and spelling fixes + updates
Browse files Browse the repository at this point in the history
To current status quo.
  • Loading branch information
miri64 committed Dec 6, 2024
1 parent 314b337 commit f762232
Showing 1 changed file with 21 additions and 21 deletions.
42 changes: 21 additions & 21 deletions doc/doxygen/src/static-vs-dynamic-memory.md
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
This page discusses the usage of memory on restricted devices
=============================================================
Static vs. Dynamic Memory
=========================

In your c program you have to decide where the memory you want to use comes from.
There are two ways to get memory in your c code:
In your C program you have to decide where the memory you want to use comes from.
There are two ways to get memory in your C code:

1. define static memory
2. use dynamic memory (call malloc/free to get memory from the heap)
1. Define static memory.
2. Use dynamic memory (call `malloc()`/`free()` to get memory from the heap).

Both ways have some drawbacks which are listed here.
If you want to analyze the static memory consumption of your code you can use [otm](https://github.com/LudwigOrtmann/otm).
If you want to analyze the static memory consumption of your code you can use [otm](https://github.com/LudwigOrtmann/otm) or `make cosy`.

static memory
Static memory
-------------
* access the memory in one operation O(1) -> real time condition
* programmer needs to know the amount of memory on compile time
* leads to over and undersized buffers
* forces the programmer to think about the amount of need memory at compile time
* Access the memory in one operation O(1) real time condition
* Programmer needs to know the amount of memory on compile time
* Leads to over and undersized buffers
* Forces the programmer to think about the amount of need memory at compile time

dynamic memory
Dynamic memory
--------------
* malloc and free are implemented in your libc (RIOT on ARM: newlib)
* run time behavior not predictable
* code can request the amount of memory it needs on run time
* on most platforms: the size of the heap is sizeof(RAM)-sizeof(static memory)
* if you reduce your usage of static memory your heap gets bigger
* on some platforms calling `free()` will not or not always make heap memory available again (see onetime_malloc() on MSP430 or the implementation of sbrk() for lpc2387)
* programmer needs to handle failed memory allocation calls at runtime
* static code analysis is unable to find errors regarding memory management
* `malloc()` and `free()` are implemented in your `libc` (RIOT on ARM: `newlib`/`picolib`)
* Runtime behavior is not predictable
* Code can request the amount of memory it needs on runtime
* On most platforms: the size of the heap is `sizeof(<RAM>)-sizeof(<static memory>)`
* If you reduce your usage of static memory your heap gets bigger
* On some platforms calling `free()` will not or not always make heap memory available again (see @ref oneway_malloc on MSP430)
* Programmer needs to handle failed memory allocation calls at runtime
* Static code analysis is unable to find errors regarding memory management

0 comments on commit f762232

Please sign in to comment.