dynamic memory alloca/on: advanced concepts
TRANSCRIPT
![Page 1: Dynamic Memory Alloca/on: Advanced Concepts](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/37.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/38.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.us/reader031/viewer/2022022801/621afb1c92ceeb111c71321c/html5/thumbnails/44.jpg)
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