Peter Mawhorter
malloc and freeFrom the user’s perspective:
malloc requests some memory.
NULL if there’s not enough memory
available.free gives back allocated memory.
malloc gave
you.malloc and freeFrom the system’s perspective:
malloc requests some memory.
free gives back allocated memory.
malloc callmovaps require alignment:
malloc are 16-byte aligned.| (unused) | ← heap origin (16-byte aligned) |
|---|---|
| 80 | 0b10 | ← block header (off-by-8 from aligned) |
| ← start of block data (16-byte aligned) | |
| … | ← 48 bytes (6 slots) not shown |
| 80 | ← block footer |
| 0 | 0b01 | ← heap footer |
(Alignment means last 4 bits are always 0; don’t need extra room for flags)
A = malloc(5)
| (unused) | ← heap origin |
|---|---|
| 16 | 0b11 | ← block header |
| ← A (aligned; 8 ≥ 5 bytes) | |
| 64 | 0b10 | ← block header |
| 64 | ← block footer |
| 0 | 0b01 | ← heap footer |
A = malloc(5); B = malloc(15)
| (unused) | ← heap origin |
|---|---|
| 16 | 0b11 | ← block header |
| ← A | |
| 32 | 0b11 | ← block header |
| ← B (24 ≥ 15 bytes) | |
| 32 | 0b10 | ← block header |
| 32 | ← block footer |
| 0 | 0b01 | ← heap footer |
A = malloc(5); B = malloc(15); free(A);
| (unused) | ← heap origin |
|---|---|
| 16 | 0b10 | ← block header |
| 16 | |
| 32 | 0b01 | ← block header |
| ← B (24 ≥ 15 bytes) | |
| 32 | 0b10 | ← block header |
| 32 | ← block footer |
| 0 | 0b01 | ← heap footer |
A = malloc(5);
B = malloc(15); free(A); free(B);
| (unused) | ← heap origin |
|---|---|
| 16 | 0b10 | ← block header |
| 16 | |
| 32 | 0b00 | ← block header (fragmented) |
| 32 | |
| 32 | 0b00 | ← block header |
| 32 | ← block footer |
| 0 | 0b01 | ← heap footer |
A = malloc(5);
B = malloc(15); free(A); free(B);
| (unused) | ← heap origin |
|---|---|
| 80 | 0b10 | ← block header (consolidated) |
| 80 | ← block footer |
| 0 | 0b01 | ← heap footer |
We’ve only allocated 2/80 bytes, but we cannot allocate the requested 25 bytes :(
| (unused) | ← heap origin |
|---|---|
| 16 | 0b11 | ← block header |
| ← A | |
| 32 | 0b10 | ← block header |
| 32 | ← block footer |
| 16 | 0b01 | ← block header |
| ← C | |
| 16 | 0b10 | ← block header |
| 16 | ← block footer |
| 0 | 0b01 | ← heap footer |
Group yourself:
malloc Reference(Prof. Herbst’s slides from a previous semester)