dynamic memory allocation in the heapcs240/f19/slides/malloc.pdfdynamic memory allocation in the...
TRANSCRIPT
![Page 1: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/1.jpg)
Dynamic Memory Allocation in the Heap(malloc and free)
Explicit allocators (a.k.a. manual memory management)
![Page 2: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/2.jpg)
Addr Perm Contents Managed by Initialized
2N-1 Stack RW Procedure context Compiler Run-time
Heap RW Dynamicdata structures
Programmer,malloc/free,
new/GCRun-time
Statics RW Global variables/ static data structures
Compiler/ Assembler/Linker Startup
Literals R String literals Compiler/ Assembler/Linker Startup
Text X Instructions Compiler/ Assembler/Linker Startup
0
Heap Allocation
![Page 3: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/3.jpg)
Allocator BasicsPages too coarse-grained for allocating individual objects.Instead: flexible-sized, word-aligned blocks.
void* malloc(size_t size);
void free(void* ptr);
3
number of contiguous bytes requiredpointer to newly allocated block of at least that size
pointer to allocated block to free
Allocated block(4 words)
Free block(3 words)
Free word
Allocated word
![Page 4: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/4.jpg)
Example (64-bit words)
4
p1 = malloc(32);
p2 = malloc(40);
p3 = malloc(48);
free(p2);
p4 = malloc(16);
![Page 5: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/5.jpg)
Allocator Goals: malloc/free1. Programmer does not decide locations of distinct objects.
Programmer decides: what size, when needed, when no longer needed
2. Fast allocation.mallocs/second or bytes malloc'd/second
3. High memory utilization.Most of heap contains necessary program data.Little wasted space.
Enemy: fragmentation – unused memory that cannot be allocated.
![Page 6: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/6.jpg)
Internal Fragmentationpayload smaller than block
Causesmetadataalignmentpolicy decisions
6
payload
block
Internal fragmentation
![Page 7: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/7.jpg)
External Fragmentation (64-bit words)
Total free space large enough,but no contiguous free block large enough
Depends on the pattern of future requests.
7
p1 = malloc(32);
p2 = malloc(40);
p3 = malloc(48);
free(p2);
p4 = malloc(48);
![Page 8: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/8.jpg)
Implementation Issues1. Determine how much to free given just a pointer.
2. Keep track of free blocks.
3. Pick a block to allocate.
4. Choose what do with extra space when allocating a structure that is smaller than the free block used.
5. Make a freed block available for future reuse.
8
![Page 9: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/9.jpg)
Knowing How Much to FreeKeep length of block in header word preceding block
9
free(p0);
p0 = malloc(32);
p0
block size metadata data payload
48
Takes extra space!
![Page 10: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/10.jpg)
Keeping Track of Free Blocks
Method 1: Implicit list of all blocks using length
Method 2: Explicit list of free blocks using pointers
Method 3: SeglistDifferent free lists for different size blocks
More methods that we will skip…
10
40 32 1648
40 32 1648
![Page 11: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/11.jpg)
Implicit Free List: Block Format
11
block size
1 word
payload(application data,when allocated)
a
optional padding
16-byte aligned sizes have4 zeroes in low-order bits
00000000000100000010000000110000…
Steal LSB for status flag.LSB = 1: allocatedLSB = 0: free
Block metadata:1. Block size2. Allocation status
Store in one header word.
![Page 12: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/12.jpg)
Implicit Free List: Heap Layout
12
16|0 32|1 64|0 32|1 0|1
Free word
Allocated word
Allocated word wasted
Start of heap
Payloads start at 16-byte (2-word) alignment.Blocks sizes are multiples of 16 bytes.
Block Header (metadata)block size | block allocated?
Special end-heap wordLooks like header ofzero-size allocate block.
Initial word can't be part of block.
May forceinternal fragmentation.
![Page 13: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/13.jpg)
Implicit Free List: Finding a Free BlockFirst fit:
Search list from beginning, choose first free block that fits
Next fit:Do first-fit starting where previous search finished
Best fit:Search the list, choose the best free block: fits, with fewest bytes left over
13
![Page 14: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/14.jpg)
16
Implicit Free List: Allocating a Free Block
14
16 1648
16 1632
p = malloc(24);
p
Now showing allocation status flag implicitly with shading.
Block Splitting
Allocated space ≤ free space.Use it all? Split it up?
![Page 15: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/15.jpg)
Implicit Free List: Freeing a Block
15
16 1632 16
p
malloc(40);
16 1632 16
External fragmentation!Enough space, not one block.
Clear allocated flag.free(p);
![Page 16: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/16.jpg)
Coalescing Free Blocks
16
32 1632 16
free(p)
32 1648 16
logically gone
p
Coalesce with following free block.
Coalesce with preceding free block?
![Page 17: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/17.jpg)
Bidirectional Coalescing: Boundary Tags
17
Boundary tag(footer)
32 32 32 32 48 3248 32
Header block size
payload(application data,when allocated)
a
optional padding
block size a
[Knuth73]
![Page 18: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/18.jpg)
Constant-Time Coalescing: 4 cases
19
m1 1
m1 1n 1
Freed Blockn 1
m2 1
m2 1
m1 1
m1 1n 0
n 0m2 1
m2 1
m1 1
m1 1n+m2 0
n+m2 0
m1 1
m1 1n 1
Freed Blockn 1
m2 0
m2 0
m1 0
m1 0n 1
Freed Blockn 1
m2 1
m2 1
n+m1 0
n+m1 0m2 1
m2 1
m1 0
m1 0n 1
Freed Blockn 1
m2 0
m2 0
n+m1+m2 0
n+m1+m2 0
![Page 19: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/19.jpg)
Summary: Implicit Free ListsImplementation: simple
Allocate: O(blocks in heap)Free: O(1)
Memory utilization: depends on placement policy
Not widely used in practicesome special purpose applications
Splitting, boundary tags, coalescing are general to all allocators.
20
![Page 20: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/20.jpg)
Explicit Free Lists
Explicit list of free blocks rather than implicit list of all blocks.
21
Free block:Allocated block:
(same as implicit free list)
block size
payload(application data,when allocated)
a
optional padding
block size a
block size anext pointer
prev pointer
block size a
![Page 21: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/21.jpg)
Explicit Free Lists: List vs. Memory OrderAbstractly: doubly-linked lists
Concretely: free list blocks in any memory order
22
A B C
32 32 32 32 4848 3232 32 32
Next
Previous
A B
C
Previous
Next
List Order ≠ Memory Order
![Page 22: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/22.jpg)
Explicit Free Lists: Allocating a Free Block
23
Before
After
= malloc(…)
(with splitting)
![Page 23: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/23.jpg)
Explicit Free Lists: Freeing a BlockInsertion policy: Where in the free list do you add a freed block?
LIFO (last-in-first-out) policyPro: simple and constant timeCon: studies suggest fragmentation is worse than address ordered
Address-ordered policyCon: linear-time search to insert freed blocksPro: studies suggest fragmentation is lower than LIFO
LIFO Example: 4 cases of freed block neighbor status.
25
![Page 24: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/24.jpg)
Freeing with LIFO Policy:between allocated blocks
Insert the freed block at head of free list.
26
free( )
Head
Head
Before
After
![Page 25: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/25.jpg)
Freeing with LIFO Policy:between free and allocated
Splice out predecessor block, coalesce both memory blocks, and insert the new block at the head of the free list.
27
free( )
Head
Head
Before
After
Could be on either or both sides...
![Page 26: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/26.jpg)
Freeing with LIFO Policy:between allocated and free
Splice out successor block, coalesce both memory blocks and insert the new block at the head of the free list.
28
free( )
Head
Head
Before
After
![Page 27: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/27.jpg)
Freeing with LIFO Policy:between free blocks
Splice out predecessor and successor blocks, coalesce all 3 memory blocks and insert the new block at the head of the list.
29
free( )
Head
Head
Before
After
![Page 28: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/28.jpg)
Summary: Explicit Free ListsImplementation: fairly simple
Allocate: O(free blocks) vs. O(all blocks)Free: O(1) vs. O(1)
Memory utilization:depends on placement policylarger minimum block size (next/prev) vs. implicit list
Used widely in practice, often with more optimizations.
Splitting, boundary tags, coalescing are general to all allocators.
36
![Page 29: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/29.jpg)
Seglist AllocatorsEach size bracket has its own free list
Faster best-fit allocation...
38
32
48-64
80-inf
16
![Page 30: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/30.jpg)
Summary: Allocator PoliciesAll policies offer trade-offs in fragmentation and throughput.
Placement policy:First-fit, next-fit, best-fit, etc.Seglists approximate best-fit in low time
Splitting policy:Always? Sometimes? Size bound?
Coalescing policy:Immediate vs. deferred
41
![Page 31: Dynamic Memory Allocation in the Heapcs240/f19/slides/malloc.pdfDynamic Memory Allocation in the Heap (mallocand free) Explicit allocators (a.k.a. manual memory management) Addr Perm](https://reader036.vdocuments.us/reader036/viewer/2022071006/5fc3a386a26cc40cd67f2c7a/html5/thumbnails/31.jpg)
Remembrallocator Block Format
42
Free block:Allocated block:block size
payload
1p block size anext pointer
prev pointer
block size
0p
payload
block size anext pointer
prev pointer
block size
01
block size
payload
10
block size
payload
11Minimum block size?- Implicit free list- Explicit free list
Update 2 headers on each malloc/free.