dynamic memory alloca/on: advanced concepts

44
Carnegie Mellon 1 Bryant and O’Hallaron, Computer Systems: A Programmer’s Perspec;ve, Third Edi;on Dynamic Memory Alloca/on: Advanced Concepts 15-213: Introduc;on to Computer Systems 20 th Lecture, Nov. 5, 2015 Instructors: Randal E. Bryant and David R. O’Hallaron

Upload: others

Post on 27-Feb-2022

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

1 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

DynamicMemoryAlloca/on:AdvancedConcepts15-213:Introduc;ontoComputerSystems 20thLecture,Nov.5,2015

Instructors:RandalE.BryantandDavidR.O’Hallaron

Page 2: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

2 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Today¢  Explicitfreelists ¢  Segregatedfreelists¢  Garbagecollec/on¢  Memory-relatedperilsandpiBalls

Page 3: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

3 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

KeepingTrackofFreeBlocks¢  Method1:Implicitfreelistusinglength—linksallblocks

¢  Method2:Explicitfreelistamongthefreeblocksusingpointers

¢  Method3:Segregatedfreelist

§  Differentfreelistsfordifferentsizeclasses

¢  Method4:Blockssortedbysize§  Canuseabalancedtree(e.g.Red-Blacktree)withpointerswithineach

freeblock,andthelengthusedasakey

5 4 26

5 4 26

Page 4: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

4 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ExplicitFreeLists

¢  Maintainlist(s)offreeblocks,notallblocks§  The“next”freeblockcouldbeanywhere

§  Soweneedtostoreforward/backpointers,notjustsizes§  S;llneedboundarytagsforcoalescing§  Luckilywetrackonlyfreeblocks,sowecanusepayloadarea

Size

Payloadandpadding

a

Size a

Size a

Size a

Next

Prev

Allocated(asbefore) Free

Page 5: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

5 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ExplicitFreeLists¢  Logically:

¢  Physically:blockscanbeinanyorder

A B C

4 4 4 4 66 44 4 4

Forward(next)links

Back(prev)links

A B

C

Page 6: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

6 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Alloca/ngFromExplicitFreeLists

Before

A:er

= malloc(…)

(withspli>ng)

conceptualgraphic

Page 7: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

7 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FreeingWithExplicitFreeLists¢  InserAonpolicy:Whereinthefreelistdoyouputanewly

freedblock?¢  LIFO(last-in-first-out)policy

§  Insertfreedblockatthebeginningofthefreelist§  Pro:simpleandconstant;me§  Con:studiessuggestfragmenta;onisworsethanaddressordered

¢  Address-orderedpolicy§  Insertfreedblockssothatfreelistblocksarealwaysinaddressorder:

addr(prev)<addr(curr)<addr(next)§  Con:requiressearch§  Pro:studiessuggestfragmenta;onislowerthanLIFO

Page 8: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

8 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FreeingWithaLIFOPolicy(Case1)

¢  Insertthefreedblockattherootofthelist

free( )

Root

Root

Before

A:er

conceptualgraphic

Page 9: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

9 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FreeingWithaLIFOPolicy(Case2)

¢  Spliceoutsuccessorblock,coalescebothmemoryblocksandinsertthenewblockattherootofthelist

free( )

Root

Before

Root

A:er

conceptualgraphic

Page 10: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

10 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FreeingWithaLIFOPolicy(Case3)

¢  Spliceoutpredecessorblock,coalescebothmemoryblocks,andinsertthenewblockattherootofthelist

free( )

Root

Root

Before

A:er

conceptualgraphic

Page 11: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

11 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FreeingWithaLIFOPolicy(Case4)

¢  Spliceoutpredecessorandsuccessorblocks,coalesceall3memoryblocksandinsertthenewblockattherootofthelist

free( )

Root

Before

Root

A:er

conceptualgraphic

Page 12: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

12 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ExplicitListSummary¢  Comparisontoimplicitlist:

§  Allocateislinear;meinnumberoffreeblocksinsteadofallblocks§  Muchfasterwhenmostofthememoryisfull

§  Slightlymorecomplicatedallocateandfreesinceneedstospliceblocksinandoutofthelist

§  Someextraspaceforthelinks(2extrawordsneededforeachblock)§  Doesthisincreaseinternalfragmenta;on?

¢  Mostcommonuseoflinkedlistsisinconjunc/onwithsegregatedfreelists§  Keepmul;plelinkedlistsofdifferentsizeclasses,orpossiblyfor

differenttypesofobjects

Page 13: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

13 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

KeepingTrackofFreeBlocks¢  Method1:Implicitlistusinglength—linksallblocks

¢  Method2:Explicitlistamongthefreeblocksusingpointers

¢  Method3:Segregatedfreelist

§  Differentfreelistsfordifferentsizeclasses

¢  Method4:Blockssortedbysize§  Canuseabalancedtree(e.g.Red-Blacktree)withpointerswithineach

freeblock,andthelengthusedasakey

5 4 26

5 4 26

Page 14: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

14 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Today¢  Explicitfreelists ¢  Segregatedfreelists¢  Garbagecollec/on¢  Memory-relatedperilsandpiBalls

Page 15: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

15 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

SegregatedList(Seglist)Allocators¢  Eachsizeclassofblockshasitsownfreelist

¢  O\enhaveseparateclassesforeachsmallsize¢  Forlargersizes:Oneclassforeachtwo-powersize

1-2

3

4

5-8

9-inf

Page 16: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

16 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

SeglistAllocator¢  Givenanarrayoffreelists,eachoneforsomesizeclass

¢  Toallocateablockofsizen:§  Searchappropriatefreelistforblockofsizem>n§  Ifanappropriateblockisfound:

§  Splitblockandplacefragmentonappropriatelist(op;onal)§  Ifnoblockisfound,trynextlargerclass§  Repeatun;lblockisfound

¢  Ifnoblockisfound:§  Requestaddi;onalheapmemoryfromOS(usingsbrk())§  Allocateblockofnbytesfromthisnewmemory§  Placeremainderasasinglefreeblockinlargestsizeclass.

Page 17: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

17 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

SeglistAllocator(cont.)¢  Tofreeablock:

§  Coalesceandplaceonappropriatelist

¢  Advantagesofseglistallocators§  Higherthroughput

§  log;meforpower-of-twosizeclasses§  Be^ermemoryu;liza;on

§  First-fitsearchofsegregatedfreelistapproximatesabest-fitsearchofen;reheap.

§  Extremecase:Givingeachblockitsownsizeclassisequivalenttobest-fit.

Page 18: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

18 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

MoreInfoonAllocators

¢  D.Knuth,“TheArtofComputerProgramming”,2ndedi/on,AddisonWesley,1973§  Theclassicreferenceondynamicstoragealloca;on

¢  Wilsonetal,“DynamicStorageAllocaAon:ASurveyandCriAcalReview”,Proc.1995Int’lWorkshoponMemoryManagement,Kinross,Scotland,Sept,1995.§  Comprehensivesurvey§  AvailablefromCS:APPstudentsite(csapp.cs.cmu.edu)

Page 19: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

19 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Today¢  Explicitfreelists ¢  Segregatedfreelists¢  Garbagecollec/on¢  Memory-relatedperilsandpiBalls

Page 20: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

20 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ImplicitMemoryManagement:GarbageCollec/on¢  GarbagecollecAon:automa/creclama/onofheap-allocated

storage—applica/onneverhastofree

¢  Commoninmanydynamiclanguages:§  Python,Ruby,Java,Perl,ML,Lisp,Mathema;ca

¢  Variants(“conserva/ve”garbagecollectors)existforCandC++§  However,cannotnecessarilycollectallgarbage

void foo() { int *p = malloc(128); return; /* p block is now garbage */ }

Page 21: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

21 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

GarbageCollec/on¢  Howdoesthememorymanagerknowwhenmemorycanbe

freed?§  Ingeneralwecannotknowwhatisgoingtobeusedinthefuturesinceit

dependsoncondi;onals§  Butwecantellthatcertainblockscannotbeusedifthereareno

pointerstothem

¢  Mustmakecertainassump/onsaboutpointers§  Memorymanagercandis;nguishpointersfromnon-pointers§  Allpointerspointtothestartofablock§  Cannothidepointers

(e.g.,bycoercingthemtoanint,andthenbackagain)

Page 22: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

22 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ClassicalGCAlgorithms¢  Mark-and-sweepcollec/on(McCarthy,1960)

§  Doesnotmoveblocks(unlessyoualso“compact”)

¢  Referencecoun/ng(Collins,1960)§  Doesnotmoveblocks(notdiscussed)

¢  Copyingcollec/on(Minsky,1963)§  Movesblocks(notdiscussed)

¢  Genera/onalCollectors(LiebermanandHewii,1983)§  Collec;onbasedonlife;mes

§  Mostalloca;onsbecomegarbageverysoon§  Sofocusreclama;onworkonzonesofmemoryrecentlyallocated

¢  Formoreinforma/on:JonesandLin,“GarbageCollecAon:AlgorithmsforAutomaAcDynamicMemory”,JohnWiley&Sons,1996.

Page 23: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

23 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

MemoryasaGraph¢  Weviewmemoryasadirectedgraph

§  Eachblockisanodeinthegraph§  Eachpointerisanedgeinthegraph§  Loca;onsnotintheheapthatcontainpointersintotheheaparecalled

rootnodes(e.g.registers,loca;onsonthestack,globalvariables)

Rootnodes

Heapnodes

Not-reachable(garbage)

reachable

Anode(block)isreachableifthereisapathfromanyroottothatnode.

Non-reachablenodesaregarbage(cannotbeneededbytheapplica/on)

Page 24: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

24 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

MarkandSweepCollec/ng¢  Canbuildontopofmalloc/freepackage

§  Allocateusingmallocun;lyou“runoutofspace”¢  Whenoutofspace:

§  Useextramarkbitintheheadofeachblock§  Mark:Startatrootsandsetmarkbitoneachreachableblock§  Sweep:Scanallblocksandfreeblocksthatarenotmarked

A:ermark Markbitset

A:ersweep freefree

root

Beforemark

Note:arrowsheredenote

memoryrefs,notfreelistptrs.

Page 25: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

25 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Assump/onsForaSimpleImplementa/on¢  Applica/on§  new(n):returnspointertonewblockwithallloca;onscleared§  read(b,i):readloca;oniofblockbintoregister§  write(b,i,v): writevintoloca;oniofblockb

¢  Eachblockwillhaveaheaderword§  addressedasb[-1],forablockb §  Usedfordifferentpurposesindifferentcollectors

¢  Instruc/onsusedbytheGarbageCollector§  is_ptr(p):determineswhetherpisapointer§  length(b):returnsthelengthofblockb,notincludingtheheader§  get_roots():returnsalltheroots

Page 26: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

26 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

MarkandSweep(cont.)

ptr mark(ptr p) { if (!is_ptr(p)) return; // do nothing if not pointer if (markBitSet(p)) return; // check if already marked setMarkBit(p); // set the mark bit for (i=0; i < length(p); i++) // call mark on all words mark(p[i]); // in the block return; }

Markusingdepth-firsttraversalofthememorygraph

Sweepusinglengthstofindnextblockptr sweep(ptr p, ptr end) { while (p < end) { if markBitSet(p) clearMarkBit(); else if (allocateBitSet(p)) free(p); p += length(p); }

Page 27: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

27 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Conserva/veMark&SweepinC¢  A“conserva/vegarbagecollector”forCprograms

§  is_ptr()determinesifawordisapointerbycheckingifitpointstoanallocatedblockofmemory

§  But,inCpointerscanpointtothemiddleofablock

¢  Sohowtofindthebeginningoftheblock?§  Canuseabalancedbinarytreetokeeptrackofallallocatedblocks(key

isstart-of-block)§  Balanced-treepointerscanbestoredinheader(usetwoaddi;onal

words)

Headerptr

Head Data

Le\ Right

SizeLe\:smalleraddressesRight:largeraddresses

Page 28: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

28 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Today¢  Explicitfreelists ¢  Segregatedfreelists¢  Garbagecollec/on¢  Memory-relatedperilsandpiBalls

Page 29: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

29 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Memory-RelatedPerilsandPiBalls¢  Dereferencingbadpointers¢  Readingunini/alizedmemory¢  Overwri/ngmemory¢  Referencingnonexistentvariables¢  Freeingblocksmul/ple/mes¢  Referencingfreedblocks¢  Failingtofreeblocks

Page 30: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

30 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

CoperatorsOperators AssociaAvity() [] -> . ledtoright! ~ ++ -- + - * & (type) sizeof righttoled* / % ledtoright+ - ledtoright<< >> ledtoright< <= > >= ledtoright== != ledtoright& ledtoright^ ledtoright| ledtoright&& ledtoright|| ledtoright?: righttoled= += -= *= /= %= &= ^= != <<= >>= righttoled, ledtoright

¢  ->,(),and[]havehighprecedence,with*and&justbelow¢  Unary+, -,and*havehigherprecedencethanbinaryforms

Source:K&Rpage53

Page 31: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

31 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

CPointerDeclara/ons:TestYourself!int *p int *p[13] int *(p[13]) int **p int (*p)[13] int *f() int (*f)() int (*(*f())[13])() int (*(*x[3])())[5]

pisapointertoint

pisanarray[13]ofpointertoint

pisanarray[13]ofpointertoint

pisapointertoapointertoanint

pisapointertoanarray[13]ofint

fisafunc;onreturningapointertoint

fisapointertoafunc;onreturningint

fisafunc;onreturningptrtoanarray[13]ofpointerstofunc;onsreturningint

xisanarray[3]ofpointerstofunc;onsreturningpointerstoarray[5]ofints

Source:K&RSec5.12

Page 32: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

32 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

DereferencingBadPointers¢  Theclassicscanfbug

int val; ... scanf(“%d”, val);

Page 33: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

33 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ReadingUnini/alizedMemory¢  Assumingthatheapdataisini/alizedtozero

/* return y = Ax */ int *matvec(int **A, int *x) { int *y = malloc(N*sizeof(int)); int i, j; for (i=0; i<N; i++) for (j=0; j<N; j++) y[i] += A[i][j]*x[j]; return y; }

Page 34: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

34 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Overwri/ngMemory¢  Alloca/ngthe(possibly)wrongsizedobject

int **p; p = malloc(N*sizeof(int)); for (i=0; i<N; i++) { p[i] = malloc(M*sizeof(int)); }

Page 35: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

35 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Overwri/ngMemory¢  Off-by-oneerror

int **p; p = malloc(N*sizeof(int *)); for (i=0; i<=N; i++) { p[i] = malloc(M*sizeof(int)); }

Page 36: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

36 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Overwri/ngMemory¢  Notcheckingthemaxstringsize

¢  Basisforclassicbufferoverflowaiacks

char s[8]; int i; gets(s); /* reads “123456789” from stdin */

Page 37: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

37 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Overwri/ngMemory¢  Misunderstandingpointerarithme/c

int *search(int *p, int val) { while (*p && *p != val) p += sizeof(int); return p; }

Page 38: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

38 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

Overwri/ngMemory¢  Referencingapointerinsteadoftheobjectitpointsto

int *BinheapDelete(int **binheap, int *size) { int *packet; packet = binheap[0]; binheap[0] = binheap[*size - 1]; *size--; Heapify(binheap, *size, 0); return(packet); }

Page 39: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

39 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ReferencingNonexistentVariables¢  Forgerngthatlocalvariablesdisappearwhenafunc/on

returns

int *foo () { int val; return &val; }

Page 40: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

40 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FreeingBlocksMul/pleTimes¢  Nasty!

x = malloc(N*sizeof(int)); <manipulate x> free(x); y = malloc(M*sizeof(int)); <manipulate y> free(x);

Page 41: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

41 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

ReferencingFreedBlocks¢  Evil!

x = malloc(N*sizeof(int)); <manipulate x> free(x); ... y = malloc(M*sizeof(int)); for (i=0; i<M; i++) y[i] = x[i]++;

Page 42: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

42 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FailingtoFreeBlocks(MemoryLeaks)¢  Slow,long-termkiller!

foo() { int *x = malloc(N*sizeof(int)); ... return; }

Page 43: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

43 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

FailingtoFreeBlocks(MemoryLeaks)¢  Freeingonlypartofadatastructure

struct list { int val; struct list *next; }; foo() { struct list *head = malloc(sizeof(struct list)); head->val = 0; head->next = NULL; <create and manipulate the rest of the list> ... free(head); return; }

Page 44: Dynamic Memory Alloca/on: Advanced Concepts

Carnegie Mellon

44 BryantandO’Hallaron,ComputerSystems:AProgrammer’sPerspec;ve,ThirdEdi;on

DealingWithMemoryBugs¢  Debugger:gdb

§  Goodforfindingbadpointerdereferences§  Hardtodetecttheothermemorybugs

¢  Datastructureconsistencychecker§  Runssilently,printsmessageonlyonerror§  Useasaprobetozeroinonerror

¢  Binarytranslator:valgrind§  Powerfuldebuggingandanalysistechnique§  Rewritestextsec;onofexecutableobjectfile§  Checkseachindividualreferenceatrun;me

§  Badpointers,overwrites,refsoutsideofallocatedblock

¢  glibcmalloccontainscheckingcode§  setenv MALLOC_CHECK_ 3