0% found this document useful (0 votes)
176 views16 pages

Prog 6

Uploaded by

capiron22
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
176 views16 pages

Prog 6

Uploaded by

capiron22
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

Practical Programming

The C Language :
Dynamic Memory
Allocation
David Bouchet
[email protected]
1
Static Allocations

● The memory size is known at compile time.


● Some data can be stored in the executable

file.
● The allocation is done when the program is

loaded into memory.


● The allocated memory cannot be freed.

● The data has the same lifetime as the running

program.
● Usually used for global variables and literals.

2
Dynamic Allocations

● The memory size can be known or


unknown at compile time.
● The allocation is done at runtime.

● The memory must be freed.

Stack and heap allocations are two different


mechanisms of dynamic allocations.

3
Stack Allocations

● Fast allocation.
● Safe.

● No memory fragmentation.

● Memory is allocated and freed automatically.

● Allocated memory is limited.

● Variables cannot be resized.

● Local access.

4
Heap Allocations

● Slow allocation.
● Unsafe.

● Memory fragmentation.

● Memory is allocated and freed manually.

● Allocated memory is not limited.

● Variables can be resized.

● Global access.

5
Stack Allocation – Example

6
Heap Allocation – Functions

#include <stdlib.h>
Allocation
void *malloc(size_t size);
void *calloc(size_t nmemb, size_t size);
void *realloc(void *ptr, size_t size);
Deallocation
void free(void *ptr);

See also the man pages


7
malloc() and free()

*p = 72

8
Dynamic Arrays - malloc()

malloc():
malloc() the memory is not initialized.
9
Dynamic Arrays - calloc()

calloc():
calloc() the memory is set to zero.
10
Dynamic Strings – malloc() (1)

11
Dynamic Strings – malloc() (2)

Hello World!
Good bye!

12
Dynamic Strings – realloc() (1)

13
Dynamic Strings – realloc() (2)

Hello World!
Good bye!

14
Dynamic Strings – Pointers to Pointers (1)

15
Dynamic Strings – Pointers to Pointers (2)

Hello World!
Good bye!

16

You might also like