eolas/zk/Heap_memory.md

41 lines
1.4 KiB
Markdown
Raw Normal View History

2024-04-20 13:20:05 +01:00
---
id: 18bl
2024-04-20 14:30:05 +01:00
tags: [memory, C]
2024-04-20 13:20:05 +01:00
created: Saturday, April 20, 2024
---
2024-04-20 13:30:05 +01:00
# Heap memory
2024-04-20 13:20:05 +01:00
2024-04-20 14:10:04 +01:00
Along with [[Stack_memory|Stack memory]], programs make use of _heap memory_
during runtime.
2024-04-20 13:30:05 +01:00
2024-04-20 14:10:04 +01:00
Heap memory does not use a standardised data structure and can be accessed from
any point within the program.
2024-04-20 13:30:05 +01:00
2024-04-20 14:10:04 +01:00
Whereas stack memory with it's LIFO structure has memory management built-in
when programs allocate memory from the heap they must manually deallocate it
when it is no longer required. This process of "freeing memory" is known as
_garbage collection_. In a language like C, this is the explicit concern of the
programmer and is not abstracted away. Failure to properly manage garbage
collection is what causes [[Memory_leaks]].
2024-04-20 14:50:05 +01:00
Heap memory is used in combination with the stack since a given heap memory
allocation address is stored as a stack variable during runtime. It points to
the heap memory address whilst not being that memory itself.
2024-04-20 14:30:05 +01:00
Here is an example of managing heap memory allocation in C:
```c
void * data;
data = malloc(512)
```
The first line assigns a special _pointer_ variable (indicated by `void *`
rather than `int` or `str`) . This is a variable only holds a memory address.
2024-04-20 14:40:05 +01:00
The `malloc` method requests 512 bytes that it wants to assign to the `data`
2024-04-20 14:50:05 +01:00
variable. It will return the address of the first byte in the newly allocated
memory. `data` will then refer to the address on the stack that holds the
address allocation on the heap.
2024-04-20 14:30:05 +01:00
2024-04-20 14:10:04 +01:00
## Related notes