[Musika jotzen]
>> DOUG LLOYD: OK beraz iradokizun bat Hemen hasi aurretik.
Ez duzu bideoa ikusi ditut bada Erakusleak, beraz, lehen egin nahi duzu.
Bideo honetan dagoelako beste erakusleak lan egiteko modua.
>> Beraz, hitz egin zenbait kontzeptu buruz
estaltzeko garela batean Bideo erakusleak, eta ez gara
Horien gainetik distira orain, Dagoeneko Oraindik dutela suposatuz
Sort ulertu.
Beraz, zure arrazoizko abisua besterik ez da duzula bideo hau ikusten ari bazara
eta ez duzu ikusi du erakusleak bideo, baliteke Sort
buru gainetik hegan pixka bat.
Eta beraz, hobe daiteke behatu ordena horretan.
>> Beraz, ikusi dugu dagoeneko inork Bide erakusle batekin lan,
hau da, bat aldarrikatzen dugu aldakorra, eta gero guk
beste aldagai bat deklaratzen, erakuslea aldakorra, dela seinalatzen.
Beraz, sortu dugu bat izen batekin aldakorra, dugu
bigarren aldagai bat sortu izen batekin, eta azpimarratu dugu bigarren aldagai hori
Lehenengo hartan.
Honen moduko bat dauka Arazoa ordea, delako
zehazki jakin behar ditugu zenbat memoria gaude
Oraingoz behar joan Gure programa konpilatu.
>> Zergatik da hori?
Izendatzeko gai izan behar dugulako edo aldagai posibleen guztiak identifikatzeko
agian topo egingo dugu.
Baliteke egongo den array bat daukagu informazio asko eduki ahal,
baina ez da oraindik zehazki nahikoa zehatza.
Zer ez badugu, zer ideia ez badugu
zenbat biltzeko ordua bilatuko dugu behar?
Edo zer gure programa hala nahi izanez gero benetan luze iraungo du,
Erabiltzaile hainbat onartuz datuak, eta ezin dugu benetan
balioesteko ari garen ala ez 1.000 unitate behar du?
>> Ez da ahal dugun lerroan esaten
Sar elementuak zenbat Uste duzu behar duzu.
Beno zer asmatzen oker dago bada?
Memoria esleipena dinamiko Sort ematen digu modu
den arazo jakin honen inguruan.
Eta bidea egiten da erakusleak erabiliz.
>> Erakusleak erabili ahal izango dugu sarrera lortzeko dinamikoki
esleitu memoria, memoria hori da Zure programa egozten martxan dago.
Ez Konpilatzerakoan esleitu.
When dinamikoki esleitu memoria dator putzu bat da
memoria-meta bezala ezagutzen.
Aurretik memoria guztia dugu aritu da ikastaroa batera
izan igerileku bat datozen memoria pila bezala ezagutzen.
A modu ona da, oro har, mind-- eta honek arau mantendu
Ez du beti eutsi egia, baina nahiko askoz ia
beti dauka true-- da edozein dela denbora aldagai izen bat ematen dizute
seguruenik, pila bizi da.
Eta edozein ez duzu aldagai bat, izen bat eman,
bertan memoria dinamiko batekin egin dezakezu esleipena, bizi zeure gainean da.
>> Orain Mota naiz hau aurkezteko bi memoria igerileku horiek ez bada.
Baina ikusi ahal izango duzu hau diagram, hau da, oro har,
ordezkaritza bat zer memoria itxura du,
eta ez gara guztiak kezkatzen joan goiko eta beheko aldean dagoen gauza.
Zer buruz zaintzen dugu zati hau erditik, hemen, arazoak izaten ari da eta pila.
Ikusi ahal izango den bezala diagrama honetan begira,
horiek benetan ez dira bi memoria igerilekuak bereiziak.
Da memoria putzu shared bat egiten Bertan, hasten zara bisuala honetan
hasteko, behealdean eta martxan betez
pila batera hondoan, eta zuk goialdean hasi eta martxan betez
goitik behera zeure from.
Baina benetan da igerileku berean, besterik ez da
lekuak ezberdinak, leku desberdinetan memoria hori esleituko ari dira.
Atera eta zuk exekutatu daiteke bai edukitzea memoria
zeure modu guztiak joan beheraino, edo dute
pilaren modu guztiak joan, goiko aldean, edo zeure eta pila izatea
elkartu bata bestearen aurka.
Horiek guztiek baldintza izan daiteke Hori da zure programa sor
den memoria agortu.
Beraz, kontuan izan hori.
When buruz hitz egiten dugu zeure eta pila
dugu benetan hitz egiten ari bera memoria zatia general, besterik
Memoria horren zati desberdinek.
>> Beraz, nola ez dinamikoki lortuko dugu memoria esleitu lehenik eta behin?
Nola lortu du gure programa memoria, exekutatzen ari den bezala?
Beno C izeneko funtzio bat ematen malloc, memoria allocator, bertan
dei bat egin nahi duzun, eta pasatzen duzu zenbat memoria byte nahi duzun.
Beraz, zure programa martxan badago eta zenbaki oso exekuzio bat nahi duzu,
lau byte mallock dezakezun memoria, malloc parentesi lau.
>> mallock joango bidez zeure bidez bila,
dinamikoki garelako memoria esleitzean,
eta izango duzu itzuliko da memoria hori erakuslea.
Ez du ematen dizute memoria gordetzeko duten ez du eman izena,
duzu, erakuslea bat ematen dio.
Eta beraz, horregatik esan dut berriro garrantzitsua da, agian,
erakusleak bideoa ikusi ditut Urrunegi lortuko dugu aurretik honetan sartu.
Beraz malloc Honez joan ematen duzu atzera erakuslea.
>> Mallock ezin bada eman duzu edozein you korrika dut delako memoria,
Emango dizu egingo back null erakuslea.
Gogoratzen al dugu bada, zer gertatzen saiatu eta null erakuslea dereference?
Seg matxura bat jasaten dugu, ezta?
Hori da, ziurrenik, ez da ona.
>> Beraz, aldi bakoitzean dei bat egiten duzunean you malloc beti, beti
egiaztatu behar diren ala ez erakuslea eman zion itzuli da zuk nulua.
Bada, zure programa amaitu behar duzu saiatu baduzu eta dereference delako
null erakuslea bazoazela segmentazio matxura bat pairatu behar
eta zure programa da hala ere huts joan.
Beraz, nola egiten dugu estatikoki zenbaki oso bat lortzeko?
>> int x.
Seguru asko dugu hori egin aldiz mordo bat, ezta?
Hau izeneko aldagai bat sortzen du pila bizi da x.
Zelan dinamikoki lortu dugu zenbaki oso bat?
Int izar px malloc 4 berdin.
>> Edo gehiago modu egokian int izar px esan genuen
int tamaina malloc berdin, besterik batzuk gutxiago botatzen
magia zenbakiak gure programa inguruan.
Hau da guretzat lortzeko joan lau memoria byte zeure hasita,
eta erakuslea lortuko dugu atzera px deritzo.
Eta gero dugu bezalaxe Aurretik egin dugu
Ahal px dereference memoria hori eskuratu.
Zelan erabiltzaileari zenbaki bat lortuko dugu?
Esan int x berdinen lortu int izango dugu.
Hori nahiko erraza.
Zer array bat sortu nahi badugu x pila gainean bizi diren karroza?
flotatzen stack_array-- duen izena da gure array karratu parentesi x.
Hori izango da gurekin array bat sortzea x pila gainean bizi diren karroza.
Karroza array bat sortu ahal izango dugu Hori zeure gainean bizi da, gehiegi.
Sintaxia bat begiratu dezake gutxi gehiago astuna,
baina karroza esan dezakegu Izar heap_array berdinen
malloc x aldiz karroza tamaina.
Gela nahikoa behar dut eutsi x koma mugikorreko balio.
Beraz, esan behar dut 100 karroza, edo 1.000 karroza.
Beraz, kasu horretan izango litzateke 400 byte 100 karroza,
edo 4.000 byte 1.000 karroza, karroza bakoitzak hartzen delako
lau espazio byte.
>> Hau egin ondoren erabili ahal izango dut kortxetea heap_array sintaxia.
Besterik ez litzateke stack_array on dudan bezala, I bere elementuak banaka sartu ahal izango da
heap_array erabiliz zero, bat heap_array.
Baina gogoratzen arrazoia egin ahal izango dugu, delako C array baten izena
benetan erakuslea Array horretan lehenengo elementua.
Izan ere, ez dugula bat deklaratzen ari karroza sorta pila hemen
benetan pixka bat engainagarria.
Benetan ere gaude kodea bigarren dago
halaber erakuslea sortzeko pusketa bat memoria hori, gero lan batzuk egin ditugu.
>> Hona hemen arazo handi du dinamikoki memoria esleitu arren,
eta hau da, zergatik da benetan Garrantzitsua ohitura onak batzuk garatzeko
denean berarekin lanean ari.
Estatikoki deklaratu bezala memoria, zure memoria
ez da automatikoki itzuli sistema denean zure funtzioa egiten da.
Beraz nagusia dugu, eta bada funtzio nagusia deitzen
f, f akaberak egiten ari denean dena delakoa eta programaren kontrola itzultzen
memoriaren nagusia, atzera guztiak f Erabiltzen atzera ematen da.
Berriro erabili ahal izateko beste programa batzuek,
edo beste funtzio batzuk lortzen geroago izeneko nagusian.
Memoria hori bera gehiagoko berriz erabili ahal izango da.
>> Baduzu dinamikoki esleitu memoria arren
Esplizituki esango duzu Berarekin duzula Bukatutakoan sistema.
Aldera egingo da mantendu behar da, eta horrek Could Arazo bat ekarriko agortzen duzu
oroimenaren.
Eta hain zuzen ere, batzuetan, erreferentzia dugu honetarako memoria leak gisa.
Eta memoria filtrazioen horien batzuetan benetan izan daiteke benetan suntsitzaileak
sistema jokabideagatik.
>> Internetera erabiltzaile maiz uzten badu Web nabigatzaile zenbait erabil dezakezu,
eta ez dut izendatzeko izen hemen, baina Web nabigatzaile batzuk daude hor kanpoan
hori benetan izatea nabaria memoria filtrazioak ez get finkoa.
Eta zure nabigatzailean irekita uzten baduzu denbora oso luzez, egun
eta egun, edo aste, batzuetan baliteke zure sistema hori nabarituko
benetan korrika, benetan poliki da.
Eta horren arrazoia dela nabigatzailea memoria esleitu ditu,
baina orduan ez sistemako esan Dela kito.
Eta beraz, memoria gutxiago uzten Zure beste programa guztiak eskuragarri
partekatzeko dute, Oraindik delako leaking-- web nabigatzaileak
programaren memoria leaking.
Zelan memoria emango dugu atzera Bukatutakoan dugu?
Beno zorionez da egiteko modu oso erraza.
Besterik askatzea dela da.
Badira free izeneko funtzio bat da, erakuslea onartu egiten oroimenerako,
eta onak joan gara.
>> Hargatik esaten ari ginen batean Gure programa erdian,
50 karaktere malloc nahi dugu.
Ahal matrize malloc nahi dugu 50 karaktere eskuratzeko gai.
Eta noiz erakuslea lortuko dugu atzera hori, erakuslea izenaren hitza da.
Ez dugu edozein dela ere gaude den hitzarekin lotutako joan,
eta orduan, ez gara Egin askatu besterik ez dugu.
Eta orain itzuli egin ditugun 50 horiek memoria byte sistema atzera.
Beste funtzio batzuk erabili dezakegu.
Guk ez dugu izan nahi bat jasaten kezkatu memoria leak hitza libratuko dugu delako.
Memorian atzera eman ditugu, beraz ari gara egiten da lan egitea.
Beraz, badira hiru urrezko arauak hori behar duten
Kontuan izan bedi direnean Oraindik dinamikoki memoria esleitzean
malloc.
Memoria bloke bakoitza malloc libratuko behar duzu
Zure programa aurretik korrika bukatuz.
Orain, berriz ere, aparatuaren edo hasi IDE hau moduko zuretzat gertatzen dena den
denean zu hau hala gertatuko da Programa amaitzean,
memorian guztiak kaleratu egingo.
Baina kodetze oro har, ona da beti praktikan, amaitu duzunean,
zer mallocd duzu libratzeko.
>> Esan, gauza bakarra dagoela duzun libratuko behar mallocd.
You estatikoki deklaratzeko bat izanez gero, osokoa, int x puntu,
pila bizi da, zuk Ez gero x askatu nahi.
Zaituzte duten gauza bakarra, beraz, mallocd libre utziko luke.
>> Eta, azkenik, egiten ez den zerbait doan birritan.
Hori ekar dezake beste egoera bitxi.
Beraz, dena zuk amesten mallocd libre utziko ditu.
Zaituzte duten gauza bakarra malloc libre utziko luke.
Eta ez zerbait doan birritan.
>> Beraz, goazen adibide baten bidez hemen zer batzuk dinamikoki esleitu of
memoria mistoa agian itxura memoria estatiko batzuk ere.
Hemen zer gerta liteke?
Ikusi jarraitu ahal bada batera eta asmatzen zer da
goazela gertatuko Kode lerro hauen guztien bidez.
>> Beraz, int m esaten dugu.
Zer gertatzen da hemen?
Beno, hau da, nahiko erraza.
M izeneko Osoko aldagai bat sortu dut.
Margotu dut berdea, kolorea delako
hitz egiten ari naiz erabiltzen dudala zenbaki oso aldagai buruz.
Kutxa bat da.
Honez m deitzen, eta ahal duzun horren barruan zenbaki osoko denda.
>> Zer dut eta gero esan int izar bat balitz?
Beno, nahiko antzekoa da.
Sortzen ari naiz izeneko koadro bat.
Da holding int gai izarrak, osokoak erakusle.
Beraz margotu dut berde-ish baita.
>> Zerbait ditu ezagutzen dut zenbaki oso bat egin,
baina ez bera da zenbaki osoa.
Baina nahiko askoz ideia bera da.
Kutxa bat sortu dut.
Eskubidea horiek biak orain pila bizi.
Eman dut horietako bi izenak.
>> int izar b berdinen int tamaina malloc.
Honek apur bat zaila izan liteke.
Hartu segundo bat eta zer duzu pentsatu diagrama hau gertatuko espero.
int izar b berdinen int tamaina malloc.
>> Beno, honek ez du besterik sortu kutxa bat.
Hau benetan bi kaxa sortzen.
Eta lotzen ditu, ezartzen du, gainera, Harreman batean puntu bat.
Bloke bat esleitu dugu memoria zeure gainean.
Iragarki goiko eskuineko koadroan dagoela Han ez du izenik.
>> Egiten mallocd dugu.
Zeure gainean existitzen da.
Baina b izen bat dauka.
B erakuslea izeneko aldagai bat da.
Pila bizi da.
>> Beraz, memoria zati bat da hori beste bat darama.
b helbidea dauka memoria bloke horren.
Ez du izen bat izan bestela.
Baina puntu bezala agertzen da.
Beraz, esan dugun int izar b berdinen malloc int tamaina, eskubidea ez dagoela,
gezi hori idatz sortu du: Eskuinaldean dago, oro har, gauza hori,
Izan dut da agertzen berriro, da zer gertatzen den.
Hori guztia gertatzen da kode lerro bakar horretan.
Orain gutxi gehiago lortuko dugu erraza berriro.
a ampersand m berdin.
Ez zer gogoratzen duzu berdinen ampersand m da?
Beno, hori da bat m en helbide lortzen.
Edo jarri gehiago diagrammatically, m puntu bat.
>> a berdinen b.
Ados, beraz, hemen beste bat da.
A berdinen b.
Zer gertatuko Diagraman denbora hau?
>> Beno, gogora ekarri du duela esleitzeko operadorea lanak
balioa esleitu eskuinetik ezkerrera on balioa.
Beraz ordez m seinalatuz a, orain bat b puntuak leku berean darama.
batek ez b puntura, a non b puntuak seinalatzen.
>> B adierazi bat izanez gero, izan dira bat ampersand b berdin.
Baina horren ordez berdin besterik b esan nahi du, eta b orain
helbide bera seinalatzen duelako b barrutik besterik helbidea da.
Eta orain, bat-barrutik helbide bera da.
m berdinen 10, ziurrenik zuzenean gauzarik
Pixka bat ere egin dugu.
Jarri 10eko koadroan.
Star b berdinen m plus 2, gogoratzen gure erakusle bideo zer izar b esan nahi du.
Ari gara dereference b eta jarri nahi dut Memoriaren balio batzuk.
Kasu honetan 12 urtean.
>> Beraz, noiz dugun puntu bat erreferentzia kenduta Gogoratzen bidaiatzeko besterik behera dugu gezi.
Edo bestela esanda, ez dugu memoria helbide horretara joan
eta manipulatu dugu nolabait.
Balio batzuk jarri ditugu han.
Kasu honetan izar b m berdinen plus 2 besterik ez da
aldakorreko joateko adierazi by b, memoria joateko adierazi by b,
eta jarri m plus 2 han ere, 12.
>> Orain b askatu nuen.
Zer gertatzen da I denean b askatzea?
Gogoratu zer esan free esan nuen.
Zer ari naiz I denean b askatzea esaten?
>> Naiz egiten da lan egitea, ezta?
Funtsean uzten ditut memorian.
Ematen dut back sistema.
Ez dut behar hau jada zer horiek kontatzen dut, OK?
>> Orain esan badut izar bat berdinen 11 seguruenik dezakezu
Dagoeneko zerbait txarra dela esango hemen gertatuko da, ezta va?
Eta seguruenik dut saiatu naiz, egia baldin bada segmentazio errua jasango luke.
Orain delako, nahiz eta Aurretik zatia memoria hori
zerbait zela izan nuen sartzeko, puntu honetan
orain memoria dut sartzean duten Ez da lege for me to sartzeko.
>> Eta seguruenik izango dugu Gogoratzen denean, memoria sartzeko dugu
ari garela, ez ustezko ukitu, hori kausa ohikoena da
segmentazio bat hutsegite. Eta orain nire programa
kraska litzateke hau egin nahi izan banu.
Beraz, berriro ere, ideia ona da ona lortu da praktika onak eta ohiturak errotuta
malloc eta doan lan egiten denean, beraz, ez duzula segmentazio sufritzen
matxurak erabili, eta zuk Zure dinamikoki esleitu
memoria arduraz.
>> Naiz Doug Lloyd hau CS50 da.