13
MINI VALGRIND

MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

MINI VALGRIND

Page 2: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

TO LEARN

• Learn how Valgrind works

• Learn memory layout and how malloc/free works

• How does free know how many bytes it has to free?

Page 3: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

MALLOC/FREE & MEMORY LAYOUT

• How does free know how many bytes to free?

• How does those ‘free block’ be reused?

• You need some meta data to tell you the size of a memory block

• Put them into a list when you free memory blocks

• When malloc

• Find a block in the list that is big enough

• Grow heap otherwise

Page 4: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

MINI VALGRIND

• Learn how to create meta data and combine them with memory asked by users

• Learn how to use linked-list to link memory blocks

MEMORYMETA_DATA

MEMORYMETA_DATA MEMORYMETA_DATA

Page 5: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

MINI VALGRIND

• mini_malloc(size_t size, const char * file, size_t line)

• use system malloc to get memory

• create meta data

• put the memory in a list

• update total_usage

• mini_free(void * ptr)

• remove from list

• use system free to free memory

• update total_free

Page 6: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

MEMORY LAYOUT

MEMORYSIZENEXT

ptr

mini_malloc()

malloc()get

MEMORYMETA_DATA

MEMORYMETA_DATA

ptr2 return

ptr is for you ptr2 is for user

Page 7: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

MEMORY LAYOUT

MEMORYMETA_DATA

ptr ptr2

Page 8: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

MEMORY LAYOUT

• Malloc

• Get ptr return ptr2

• Free

• Get ptr2 return ptr

• How to calculate ptr/ptr2 from ptr2/ptr?

Page 9: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

SMALL TRICK

MEMORY LAYOUT

• Zero-Length Array

• struct my_wrap{

• M

• };

Page 10: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

HINT

• Global variables in mini_valgrind.c

• meta_data * head : head for linked-list

• total_usage: keep track of bytes used

• total_free: keep track of bytes freed

• Split linked-list logic to separate functions.

• Insert has to be constant time.

• Have to catch bad calls of free(like double free).

Page 11: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

DEMO

Page 12: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

DOUBLE FREE

DEMO

Page 13: MINI VALGRINDweichunstevelee.github.io/slides/min_valgrind.pdf · MINI VALGRIND • Learn how to create meta data and combine them with memory asked by users • Learn how to use

memory leak: ptr4

DEMO