03 Implicit Free Lists

background image

University  of  Washington  

Sec3on  10:  Memory  Alloca3on  Topics  

¢

Dynamic  memory  alloca3on  

§

Size/number  of  data  structures  may  only  be  known  at  run  7me  

§

Need  to  allocate  space  on  the  heap  

§

Need  to  de-­‐allocate  (free)  unused  memory  so  it  can  be  re-­‐allocated  

¢

Implementa3on    

§

Implicit  free  lists  

§

Explicit  free  lists  –  subject  of  next  programming  assignment  

§

Segregated  free  lists  

¢

Garbage  collec3on  

¢

Common  memory-­‐related  bugs  in  C  programs  

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Implementa3on  Issues  

¢

How  do  we  know  how  much  memory  to  free  given  just  a  

pointer?  

¢

How  do  we  keep  track  of  the  free  blocks?  

¢

How  do  we  pick  a  block  to  use  for  alloca3on  (when  many  

might  fit)?  

¢

What  do  we  do  with  the  extra  space  when  alloca3ng  a  

structure  that  is  smaller  than  the  free  block  it  is  placed  in?  

¢

How  do  we  reinsert  freed  block  into  the  heap?  

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Knowing  How  Much  to  Free  

¢

Standard  method  

§

Keep  the  length  of  a  block  in  the  word  preceding  the  block  

§ 

This  word  is  oFen  called  the  

header  field

 

or  

header  

§

Requires  an  extra  word  for  every  allocated  block  

free(p0)

p0 = malloc(4)

Memory  Alloca3on  Implementa3on  

p0

block  size  

data  

5  

background image

University  of  Washington  

Keeping  Track  of  Free  Blocks  

¢

Method  1:  

Implicit  list  

using  length—links  all  blocks  

¢

Method  2:  

Explicit  list  

among  the  free  blocks  using  pointers  

 

¢

Method  3:  

Segregated  free  list  

§

Different  free  lists  for  different  size  classes  

¢

Method  4:  

Blocks  sorted  by  size  

§

Can  use  a  balanced  binary  tree  (e.g.  red-­‐black  tree)  with  pointers  

within  each  free  block,  and  the  length  used  as  a  key  

5

4  

2  

6  

5

4  

2  

6  

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Implicit  Free  Lists  

¢

For  each  block  we  need:  size,  is-­‐allocated?  

§

Could  store  this  informa7on  in  two  words:  wasteful!  

¢

Standard  trick  

§

If  blocks  are  aligned,  some  low-­‐order  size  bits  are  always  0  

§

Instead  of  storing  an  always-­‐0  bit,  use  it  as  a  allocated/free  flag  

§

When  reading  size,  must  remember  to  mask  out  this  bit  

size  

1  word  

Format  of  

allocated  and  

free  blocks  

payload  

a  =  1:  allocated  block      

a  =  0:  free  block  

 

size:  block  size  

 

payload:  applica3on  data  

(allocated  blocks  only)  

 

a  

op3onal  

padding  

Memory  Alloca3on  Implementa3on  

e.g.  with  8-­‐byte  alignment,  

sizes  look  like:  

       00000

000

 

       00001

000  

       00010

000  

       00011

000  

       …  

background image

University  of  Washington  

Implicit  Free  List  Example  

¢

8-­‐byte  alignment  

§

May  require  ini7al  unused  word  

§

Causes  some  internal  fragmenta7on  

¢

One  word  (0/1)  to  mark  end  of  list  

2/0

4/1

8/0

4/1

0/1

Free  word  

Allocated  word  

Allocated  word  

unused  

Start  of  heap  

8  bytes  =  2  word  alignment  

Sequence  of  blocks  in  heap:  2/0,  4/1,  8/0,  4/1  (size/allocated)  

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Implicit  List:  Finding  a  Free  Block  

¢

First  fit:  

§

Search  list  from  beginning,  choose  

first

 free  block  that  fits:

 

 
 
 
 
 

§

Can  take  7me  linear  in  total  number  of  blocks  (allocated  and  free)  

§

In  prac7ce  it  can  cause  “splinters”  at  beginning  of  list  

¢

Next  fit:  

§

Like  first-­‐fit,  but  search  list  star7ng  where  previous  search  finished  

§

Should  oFen  be  faster  than  first-­‐fit:  avoids  re-­‐scanning  unhelpful  blocks  

§

Some  research  suggests  that  fragmenta7on  is  worse  

¢

Best  fit:  

§

Search  the  list,  choose  the  

best

 free  block:  fits,  with  fewest  bytes  leF  over  

§

Keeps  fragments  small—usually  helps  fragmenta7on  

§

Will  typically  run  slower  than  first-­‐fit  

p = heap_start;

while ((p < end) &&

\\ not passed end

((*p & 1) ||

\\ already allocated

(*p <= len)))

\\ too small

p = p + (*p & -2);

\\ goto next block

Memory  Alloca3on  Implementa3on  

*p  gets  the  block  header  

*p  &  1  extracts  the  

allocated  bit  

*p  &  -­‐2  masks  the  allocated  

bit,  gets  just  the  size  

background image

University  of  Washington  

2  

Implicit  List:  Alloca3ng  in  Free  Block  

¢

Alloca3ng  in  a  free  block:  

spliCng  

§

Since  allocated  space  might  be  smaller  than  free  space,  we  might  want  

to  split  the  block  

void addblock(ptr p, int len) {

int newsize = ((len + 1) >> 1) << 1;

// round up to even

int oldsize = *p & -2;

// mask out low bit

*p = newsize | 1;

// set new length + allocated

if (newsize < oldsize)

*(p+newsize) = oldsize - newsize;

// set length in remaining

}

// part of block

4  

4  

2  

6  

4  

2  

4  

p  

4  

addblock(p, 4)

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Implicit  List:  Freeing  a  Block  

¢

Simplest  implementa3on:  

§

Need  only  clear  the  “allocated”  flag  

void free_block(ptr p) { *p = *p & -2 }

§

But  can  lead  to  “false  fragmenta7on”    

 
 
 
 
 
 

 

 
There  is  enough  free  space,  but  the  allocator  won’t  be  able  to  find  it  

4  

2  

4  

2  

p

4  

free(p)

4  

4  

2  

4  

2  

malloc(5)

Oops!  

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Implicit  List:  Coalescing  

¢

Join  

(coalesce)  

with  next/previous  blocks,  if  they  are  free  

§

Coalescing  with  next  block  





 
 
 
 

§

But  how  do  we  coalesce  with  the  previous  block?  

void free_block(ptr p) {

*p = *p & -2;

// clear allocated bit

next = p + *p;

// find next block

if ((*next & 1) == 0)

*p = *p + *next;

// add to this block if

}

// not allocated

4  

2  

4  

2  

free(p)

p

4  

4  

2  

4  

6  

2  

logically  

gone  

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Implicit  List:  Bidirec3onal  Coalescing    

¢

Boundary  tags  

[Knuth73]  

§

Replicate  size/allocated  word  at  “bogom”  (end)  of  free  blocks  

§

Allows  us  to  traverse  the  “list”  backwards,  but  requires  extra  space  

§

Important  and  general  technique!  

size  

Format  of  

allocated  and  

free  blocks  

payload  and  

padding  

a  =  1:  allocated  block      

a  =  0:  free  block  

 

size:  total  block  size  

 

payload:  applica3on  data  

(allocated  blocks  only)  

 

a  

size  

a  

Boundary  tag  

(footer)  

4  

4   4  

4  

6   4  

6  

4  

Header  

Memory  Alloca3on  Implementa3on  

background image

University  of  Washington  

Implicit  Free  Lists:  Summary  

¢

Implementa3on:  very  simple  

¢

Allocate  cost:    

§

linear  7me  (in  total  number  of  heap  blocks)  worst  case  

¢

Free  cost:    

§

constant  7me  worst  case  

§

even  with  coalescing  

¢

Memory  u3liza3on:    

§

will  depend  on  placement  policy  

§

First-­‐fit,  next-­‐fit  or  best-­‐fit  

 

¢

Not  used  in  prac3ce  for  malloc()/free()  because  of  

linear-­‐3me  alloca3on  

§

used  in  some  special  purpose  applica7ons  

 

¢

The  concepts  of  spliang  and  boundary  tag  coalescing  are  

general  to  

all

 allocators  

Memory  Alloca3on  Implementa3on  


Wyszukiwarka

Podobne podstrony:
21.03.2011 Przekaz w dzien Przesilenia. ADAMUS - SAINT GERMAIN, Free
3 03 In ufficio FORME IMPLICITE
Norton Andre Free Traders 03 Lot Ku Planecie Yiktor
Norton, Andre Free Trader Moon Singer 03 Flight in Yiktor
Free Download SPINTIRES (2014) Build v03 03 2016 [ 21 Pojazdów]
Free Crochet Patterns Rose and Pineapple Bedspread Pattern 2012 03 16
Norton, Andre Free Trader Moon Singer 03 Flight in Yiktor
03 Sejsmika04 plytkieid 4624 ppt
03 Odświeżanie pamięci DRAMid 4244 ppt
podrecznik 2 18 03 05
od Elwiry, prawo gospodarcze 03
Probl inter i kard 06'03
TT Sem III 14 03
03 skąd Państwo ma pieniądze podatki zus nfzid 4477 ppt
03 PODSTAWY GENETYKI
Wyklad 2 TM 07 03 09

więcej podobnych podstron