forked from RIOT-OS/RIOT
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
doc/static-vs-dynamic-memory: style and spelling fixes + updates
To current status quo.
- Loading branch information
Showing
1 changed file
with
21 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |