>> [Music kucheza]
>> [VIDEO avspelning]
>> Hapo ni uongo.
>> -Kuhusu nini?
>> -Sijui.
>> -Basi Je, sisi kujua?
>> -yaani Katika 9:15, Ray Santoya alikuwa katika ATM.
-Yeah.
Hivyo swali ni, nini yeye kufanya katika 9:16?
>> -Shooting 9 millimeter katika kitu.
Labda aliona sniper.
>> -au Alikuwa akifanya kazi pamoja naye.
>> -Wait.
Kurudi nyuma moja.
>> -Nini Do you see?
>> -Bring Uso wake up screen kamili.
>> -His Glasi.
>> -Kuna Kutafakari.
>> -Ni Nuevitas baseball timu.
Hiyo ni alama zao.
>> -Na Yeye kuzungumza kwa yeyote amevaa koti kwamba.
>> [Mwisho avspelning]
>> DAVID Malan: zote haki.
Hii ni CS50 na hii ni kidogo zaidi ya [inaudible] na ambayo uko
dabbling na tatizo kuweka minne.
Leo tunaanza kwa kuangalia kidogo zaidi undani katika mambo haya kuitwa kuyatumia,
ambayo hata kama ni mada pretty arcane,
zinageuka kuwa itakuja kuwa njia ambayo sisi
Unaweza kuanza kujenga na kukusanyika mipango zaidi ya kisasa.
Lakini sisi alifanya hivyo siku ya Jumatano iliyopita kwa njia ya baadhi claymation kwanza.
Hivyo hii, kukumbuka, ni Binky na sisi alimtumia
kwa kuangalia mpango kwamba si kweli kufanya kitu chochote kuvutia,
lakini haikuwa yatangaza matatizo machache.
Hivyo kuanza leo, kwa nini sio sisi kutembea haraka kwa njia chache ya hatua hizi,
kujaribu distill katika maisha ya binadamu ya nini hasa kinaendelea hapa
na kwa nini hii ni mbaya, na kisha kuondoka na kwa kweli kuanza kujenga kitu
na mbinu hii?
Hivyo hawa ndio kwanza mistari miwili katika mpango huu
na katika suala layman, nini ni mistari hizi mbili kufanya?
Mtu ambaye ni sababu ya starehe kwa nini alitangaza kwenye screen?
Je, ni mistari hizi mbili kufanya?
Siyo kila kitu tofauti na wiki moja,
lakini kuna baadhi ya mwezi alama maalum.
Yeah?
Huko nyuma.
>> Watazamaji: Kutangaza kuyatumia?
DAVID Malan: Sema tena?
Watazamaji: Kutangaza kuyatumia?
DAVID Malan: Kutangaza kuyatumia na hebu kuboresha yake kidogo zaidi.
Watazamaji: [inaudible] anuani x na kisha y.
DAVID Malan: Na kisha kushughulikia.
Hivyo hasa nini sisi ni kufanya ni sisi ni kutangaza vigezo wawili.
Vigezo hivi, ingawa, ni kwenda kuwa wa aina int nyota, ambayo
zaidi hasa maana yake ni wao ni kwenda kuhifadhi
pepe ya int, mtiririko, x na y.
Sasa ni pale maadili yoyote?
Je, kuna anwani halisi yoyote katika hizi vigezo mbili katika hatua hii katika wakati?
Hakuna
Ni tu kinachojulikana maadili takataka.
Kama huna kweli kuwapa kutofautiana, chochote kilichokuwa katika RAM
awali ni kwenda kujaza na zeros na ndio wote wawili wa vigezo hizo.
Lakini sisi bado kujua nini hao na kwamba
kwenda kuwa muhimu kwa nini Binky waliopotea kichwa chake wiki iliyopita.
>> Hivyo hii ilikuwa claymation mwili wa hii
ambapo una vigezo mbili tu, vipande mviringo kidogo ya udongo,
kwamba wanaweza kuhifadhi vigezo, lakini kama ilimalizika mishale kupendekeza,
wao siyo kweli akizungumzia na mahali popote inayojulikana per se.
Hivyo basi tungekuwa na mstari huu, na hii ilikuwa mpya wiki iliyopita, malloc kwa kumbukumbu
mgao, ambayo ni njia tu ya dhana ya kuwaambia mfumo wa uendeshaji, Linux
au Mac OS au Windows, hey, nipe baadhi ya kumbukumbu,
na wote una kuwaambia mfumo wa uendeshaji
ni nini wakati kuuliza ni kwa ajili ya kumbukumbu.
Ni si kwenda kwa huduma ya kile wewe ni kwenda kufanya na hayo,
lakini huna haja ya kuwaambia uendeshaji mfumo kile kwa njia ya malloc.
Yeah?
>> Watazamaji: Ni kiasi gani?
DAVID Malan: Ni kiasi gani?
Kiasi gani katika ka, na hivyo, hii, tena, mfano contrived, ni kusema tu,
nipe ukubwa wa int.
Sasa, ukubwa wa int ni ka nne au 32 bits.
Hivyo hii ni njia tu ya akisema, hey, mfumo wa uendeshaji,
nipe ka nne ya kumbukumbu kwamba naweza kutumia ovyo yangu,
na hasa, ni nini malloc kurudi kwa heshima
kwa kuwa chunk ya ka nne?
Watazamaji: Mitaani?
DAVID Malan: mahali.
Pepe ya kwamba chunk ya ka nne.
Hasa.
Na hivyo kwamba ni nini kuhifadhiwa hatimaye katika x na hii ndiyo sababu sisi si kweli
huduma ya kile idadi ya kwamba anuani ni, kama ni OX1 au OX2
au baadhi cryptic hexadecimal mahali.
Sisi tu huduma pictorially kuwa kwamba kutofautiana x ni sasa
akizungumzia kwamba chunk ya kumbukumbu.
Hivyo mshale inawakilisha pointer, au zaidi hasa, kumbukumbu ya mahali.
Lakini tena, hatuna kawaida huduma nini wale anwani halisi watu.
Sasa, mstari huu inasema nini katika suala layman?
Star x anapata 42 semicolon.
Hii ina maana gani?
Unataka kwenda?
Je, si scratch shingo yako.
>> Watazamaji: pepe ya x ni katika 42.
>> DAVID Malan: pepe ya x ni katika 42.
Si kabisa.
Hivyo karibu, lakini si kabisa, kwa sababu kuna nyota hiyo prefixing x huu.
Kwa hiyo, tunahitaji tweak kidogo.
Yeah?
>> Watazamaji: thamani kwamba pointer x ni akizungumzia ni 42.
DAVID Malan: Sawa.
Thamani kwamba pointer X ni akizungumzia, hebu sema, atakuwa 42,
au kuweka njia nyingine, nyota x anasema, kwenda chochote anuani
ni katika x, kama ni 1 Oxford Mitaani au 33 Oxford Street
au OX1 au ox33, chochote kwamba numeric anwani ni,
nyota x ni dereferencing ya x.
Hivyo kwenda kwa anwani hiyo na kisha kuweka namba 42 hapo.
Hivyo kwamba itakuwa sawa njia ya kusema kwamba.
Hivyo hiyo ni yote mazuri na kisha tunataka kuwakilisha picha
kama ifuatavyo ambapo tumekuwa aliongeza 42 kwa kuwa chunk ya nne
ka juu ya upande wa kulia, lakini mstari huu ulikuwa ambapo mambo ilikwenda kombo
na kichwa Binky ya popped mbali katika hatua hii,
kwa sababu mambo mabaya kutokea wakati wewe dereference maadili takataka
au wewe dereference batili kuyatumia, na nasema batili
kwa sababu katika hatua hii katika hadithi, ni nini ndani ya y?
Nini thamani ya y msingi juu ya siku za nyuma hatua chache?
Yeah?
Nini hiyo?
>> Watazamaji: mahali.
DAVID Malan: mahali.
Ni lazima anuani lakini mimi initialized hivyo?
Hivyo nina bado.
Kwa hiyo kile inajulikana kuwa katika huko?
Ni baadhi tu ya thamani ya takataka.
Ni inaweza kuwa anwani yoyote kutoka sifuri kwa Bilioni 2 kama una gigs mbili ya RAM,
au zero kwa bilioni 4 kama wameweza got gigabytes nne ya RAM.
Ni baadhi ya thamani ya takataka, lakini tatizo ni
kuwa mfumo wa uendeshaji, ikiwa ni haijatoa wewe
kwamba chunk ya kumbukumbu mahsusi kwamba wewe ni kujaribu kwenda,
ni kwa ujumla kwenda kusababisha kile tumeona kama segmentation kosa.
Hivyo kwa kweli, mmoja wenu ambao wana akihangaika katika matatizo katika masaa ya ofisi
au katika matatizo ambayo ni zaidi ujumla na kujaribu kufikiri
segmentation kosa, kwamba ujumla maana yake
wewe ni kugusa sehemu ya kumbukumbu kwamba unapaswa kuwa.
Wewe ni kugusa kumbukumbu kwamba mfumo wa uendeshaji ina si
kuruhusiwa wewe kugusa, kama ni na kwenda mbali mno katika safu yako
au kuanzia sasa, iwe ni kwa sababu wewe ni kugusa
kumbukumbu kwamba tu ni baadhi ya thamani ya takataka.
>> Akifanya hivyo nyota x hapa ni aina ya tabia kisichojulikana.
Unapaswa kamwe kufanya hivyo kwa sababu ya tabia mbaya ni, mpango tu kwenda ajali,
kwa sababu wewe ni kusema, kwenda anwani hii
na wewe huna wazo ambapo anwani hiyo kweli ni.
Hivyo mfumo wa uendeshaji ni uwezekano kwenda kwa ajali ya mpango wako
kutokana na kwa kweli, hiyo ni kile kilichotokea pale kwa Binky.
Hivyo hatimaye, Binky fasta tatizo hili na hili.
Hivyo mpango kwamba yenyewe ilikuwa kiujanja.
Lakini kama wewe ni aina ya kusonga mbele na kutekeleza mstari huu badala yake,
y sawa x tu ina maana chochote anuani ni x, pia kuiweka katika y.
>> Na hivyo pictorially, tumekuwa kuwakilishwa huu kwa mishale miwili
kutoka x na y akizungumzia kutoka kwa sehemu moja.
Hivyo semantically, x ni sawa kwa sababu y wote wawili wa wale
ni hifadhi hiyo mitaani, ergo akionyesha 42,
na sasa, unaposema nyota y, kwenda anuani katika y,
hii ina kuvutia upande athari.
Hivyo anuani katika y ni kitu kimoja kama anwani katika x.
Hivyo kama wewe kusema kwenda anwani katika y na mabadiliko ya thamani ya 13,
nani mwingine ni walioathirika?
X ni, hatua D, hivyo kusema, lazima walioathirika vilevile.
>> Na hakika, jinsi Nick waliochota picha hii katika claymation ilikuwa hasa kwamba.
Hata ingawa sisi kufuata pointer y, sisi kuishia katika sehemu moja,
na hivyo kama tulikuwa na magazeti nje x au y ya pointee,
kisha tunataka kuona thamani ya 13.
Sasa, nasema pointee kuwa sambamba na video.
Programmers, kwa yangu maarifa, kamwe kweli
kusema neno pointee, yaliyo chongoka
katika, lakini kwa uthabiti na video, kutambua
hiyo ni yote yaliyokuwa maana katika hali hiyo.
Hivyo maswali yoyote juu ya claymation au kuyatumia au malloc bado tu?
Hakuna?
Sawa.
>> Hivyo bila zaidi wasiwasi, hebu tuangalie
katika ambapo hii ina kweli zimetumika kwa muda fulani.
Hivyo tulikuwa na hii maktaba CS50 kwamba got wote wa kazi hizo.
Tumekuwa kutumika GetInt mengi, GetString, pengine GetLongLong mapema
katika pset yangu mmoja au hivyo, lakini nini hasa kinachoendelea?
Naam, hebu tuangalie kwa haraka chini ya Hood katika mpango huo
kuwahamasisha nini sisi kukupa CS50 maktaba, na kwa kweli kama ya wiki iliyopita,
sisi kuanza kuchukua wale magurudumu mafunzo mbali.
Hivyo hii sasa ni yamepangwa ya postmortem ya kile
ina kinachoendelea ndani ya maktaba CS50,
hata kama sisi sasa itaanza kusonga mbali na hayo kwa programu nyingi.
>> Hivyo hii ni mpango ujulikanao scanf 0.
Ni super mfupi.
Ni tu ina mistari haya, lakini utangulizi kazi kuitwa scanf
kwamba sisi ni kweli kwenda kuona katika wakati ndani ya maktaba CS50,
angalau katika fomu tofauti kidogo.
Hivyo mpango huu kwenye mstari 16 anatangaza x kutofautiana.
Basi nipe ka nne kwa int.
Imekuwa ni kuwaambia user, idadi tafadhali, na kisha
hii ni mstari kuvutia kwamba kweli mahusiano pamoja wiki iliyopita
na hii.
Scanf, na kisha taarifa inachukua string format, kama vile printf,
% i maana int, na kisha inachukua pili hoja ambayo inaonekana kidogo
funky.
Ni ampersand x, na kukumbuka, sisi tu aliona wiki hii mara moja iliyopita.
Je ampersand x kuwakilisha?
Je ampersand kufanya katika C?
Yeah?
>> Watazamaji: pepe ya.
DAVID Malan: pepe ya.
Hivyo ni kinyume ya nyota operator,
ambapo nyota operator anasema, kwenda anwani hii, mwendeshaji ampersand
anasema, kufikiri pepe ya kutofautiana hii,
na hivyo hii ni muhimu, kwa sababu Madhumuni scanf katika maisha
ni kwa Scan mtumiaji pembejeo kutoka keyboard,
kutegemea chochote yeye au yeye aina, na kisha kusoma pembejeo kwamba mtumiaji
ndani ya kutofautiana, lakini sisi aliona katika wiki mbili zilizopita
kuwa kwamba wabadilishane kazi kwamba sisi walijaribu effortlessly kutekeleza
mara tu kuvunjwa.
Kumbuka kwamba kwa wabadilishane kazi, kama sisi tu alitangaza A na B kama ints,
hatukuwa mafanikio wabadilishane vigezo mbili ndani ya kubadilishana
tu kama maziwa na OJ, lakini haraka kama wabadilishane akarudi,
nini ilikuwa ni matokeo kwa heshima kwa x na y, maadili ya awali?
Chochote.
Naam.
Hakuna kilichotokea wakati huo, kwa sababu swaps mabadiliko tu nakala yake mitaa,
ambayo ni kusema, kila wakati huu, wakati wowote tumekuwa
wamekuwa kupita katika hoja kwa kazi, tuko
tu kupita nakala za hoja hizo.
Unaweza kufanya na kwamba chochote unataka na wao,
lakini wao wanaenda kuwa hakuna athari juu ya maadili ya awali.
Hivyo hii ni tatizo kama wewe wanataka kuwa na kazi kama scanf
katika maisha, ambao lengo ni Scan pembejeo mtumiaji kutoka keyboard
na kisha kujaza nafasi zilizoachwa wazi, hivyo kwa kusema, yaani, kutoa kutofautiana kama x
thamani, kwa sababu kama ningekuwa kupita tu x kwa scanf,
kama wewe kufikiria mantiki ya mwisho wiki, scanf unaweza kufanya chochote anataka
na nakala ya x, lakini hawakuweza kudumu mabadiliko x isipokuwa sisi kutoa
scanf hazina ramani, ili kuzungumza, ambapo x alama doa, ambapo
sisi kupita katika anuani ya x ili scanf unaweza kwenda huko na kwa kweli mabadiliko
thamani ya x.
Na hivyo kweli, kila kwamba mpango huu gani
kama mimi kufanya scanf 0, katika chanzo yangu 5m directory, kufanya scanf 0,
dot kufyeka scanf, idadi tafadhali 50, shukrani kwa 50.
>> Hivyo si wote kwamba kuvutia, lakini nini kweli yanatokea
ni kwamba haraka kama mimi wito scanf hapa hiyo, thamani ya x
ni kuwa kudumu iliyopita.
Sasa, hii inaonekana nzuri na nzuri, na kwa kweli,
Inaonekana kama sisi si kweli haja maktaba CS50 wakati wote tena.
Kwa mfano, hebu kukimbia hii kwa mara nyingine tena hapa.
Napenda reopen ni kwa ajili ya pili.
Hebu jaribu idadi tafadhali na badala ya kusema 50 kama kabla,
hebu sema tu hakuna.
OK, hiyo ni weird kidogo.
SAWA.
Na baadhi tu yasiyo na msingi hapa.
Hivyo haionekani kushughulikia hali potofu.
Kwa hiyo, tunahitaji kuanza ya chini kuongeza baadhi ya makosa ya kuangalia
kuhakikisha kwamba mtumiaji ana typed katika idadi halisi kama 50,
kwa sababu maneno inaonekana kuandika si wanaona kama tatizo,
lakini pengine lazima.
>> Hebu tuangalie hili toleo sasa hiyo ni jaribio yangu reimplement GetString.
Kama scanf ina yote haya utendaji kujengwa katika,
mbona sisi wamekuwa dabbling na haya magurudumu mafunzo kama GetString?
Naam, hapa ni labda yangu mwenyewe rahisi toleo la GetString
ambapo wiki iliyopita, mimi ili kuwa alisema, nipe kamba na kuiita buffer.
Leo, mimi nina kwenda kuanza tu akisema char nyota, ambayo, kukumbuka,
ni tu sawa.
Inaonekana scarier lakini ni exact kitu.
Basi nipe variable kuitwa buffer hiyo ni kwenda kuhifadhi kamba,
kuwaambia kamba user tafadhali, na kisha, kama kabla,
hebu jaribu kukopa somo hili scanf % s wakati huu na kisha kupita katika buffer.
Sasa, haraka sanity hundi.
Kwa nini mimi si kusema ampersand buffer wakati huu?
Infer kutoka mfano uliopita.
Watazamaji: Char nyota ni pointer.
DAVID Malan: Hasa, kwa sababu wakati huu, char
nyota ni tayari pointer, mitaani, kwa ufafanuzi wa kwamba nyota kuwa huko.
Na kama scanf anatarajia mitaani, yatosha tu kupita katika buffer.
Sina haja ya kusema ampersand buffer.
Kwa wadadisi, ungeweza kufanya kitu kama hiki.
Ingekuwa na maana tofauti.
Hii itakuwa kukupa pointer kwa pointer, ambayo ni kweli
Jambo halali katika C, lakini kwa sasa, hebu kushika ni rahisi
na kuweka hadithi thabiti.
Mimi tu kwenda kupita katika buffer na hiyo ni sahihi.
Tatizo ingawa ni hii.
Hebu kwenda mbele na kukimbia hii Mpango baada ya kuandaa yake.
Kufanya scanf 1.
Damn hiyo, compiler yangu kuambukizwa makosa yangu.
Nipe moja ya pili.
Clang.
Hebu sema scanf-1.c.
SAWA.
Kuna sisi kwenda.
Naihitaji.
CS50 ID ina mbalimbali mipangilio
kwamba kulinda wewe dhidi ya mwenyewe.
Mimi zinahitajika afya wale na mbio Clang manually wakati huu.
Hivyo kamba tafadhali.
Mimi nina kwenda mbele na aina katika favorite hujambo dunia yangu.
OK, null.
Hiyo si kile typed.
Hivyo ni dalili ya kitu kuwa kibaya.
Hebu kwenda mbele na aina katika kamba kweli kwa muda mrefu.
Shukrani kwa batili na sijui kama mimi nina kwenda kuwa na uwezo wa ajali hiyo.
Hebu jaribu nakala kidogo kuweka na kuona kama hii husaidia.
Tu kuweka mengi ya hii.
Ni dhahiri kubwa kamba kuliko kawaida.
Hebu tu kweli kuandika.
Hakuna
Damn it.
Amri halikupatikana.
Hivyo hiyo ni lisilohusiana.
Hii ni kwa sababu mimi pasted baadhi ya wahusika mbaya,
lakini hii zinageuka si kwenda kufanya kazi.
>> Hebu jaribu hii kwa mara nyingine tena, kwa sababu ni furaha zaidi kama sisi kweli ajali hiyo.
Hebu aina hii na sasa, mimi nina kwenda nakala kamba kweli kwa muda mrefu
na sasa hebu angalia kama sisi unaweza ajali jambo hili.
Taarifa mimi kuachwa nafasi na mistari mpya na semicolons
na wahusika wote funky.
Kuingia.
Na sasa mtandao ni kuwa tu polepole.
Mimi uliofanyika chini amri-V muda mrefu sana, wazi.
Damn it!
Amri halikupatikana.
>> SAWA.
Naam, uhakika ni hata hivyo kufuatia.
Kwa hiyo kile ni kweli kwenda tarehe na tamko hili
ya char nyota buffer kwenye mstari 16?
Kwa hiyo kile ni mimi kupata wakati mimi kutangaza pointer?
Wote mimi nina kupata ni thamani wanne Byte aitwaye buffer, lakini nini ndani yake
kwa kipindi hiki?
Ni baadhi tu ya thamani ya takataka.
Kwa sababu wakati wowote kutangaza kutofautiana katika C, ni baadhi tu ya thamani ya takataka,
na sisi ni mapya ya safari juu ya ukweli huu.
Sasa, wakati mimi kuwaambia scanf, kwenda anwani hii
na kuweka chochote mtumiaji aina katika.
Kama mtumiaji aina katika hujambo dunia, vizuri, ambapo mimi kuiweka?
Buffer ni thamani ya takataka.
>> Hivyo hiyo ni aina ya kama mshale hiyo akizungumzia ambaye anajua wapi.
Labda ni akizungumzia hapa hapa katika kumbukumbu yangu.
Na hivyo wakati mtumiaji aina katika hujambo dunia,
Mpango anajaribu kuweka kamba hujambo dunia backslash 0
katika kwamba chunk ya kumbukumbu.
Lakini pamoja na uwezekano mkubwa, lakini wazi si 100% uwezekano,
kompyuta ni kwenda basi ajali Mpango kwa sababu hii si
kumbukumbu mimi waruhusiwe kugusa.
Hivyo katika muda mfupi, mpango huu ni kiujanja kwa hasa sababu hiyo.
Mimi kimsingi si kufanya nini?
Ni hatua na mimi kuachwa, kama vile sisi liliondolewa kwa mfano kwanza Binky ya?
Yeah?
>> Watazamaji: mgao Kumbukumbu?
>> DAVID Malan: mgao Kumbukumbu.
Mimi si kweli zilizotengwa kumbukumbu yoyote kwa kamba hiyo.
Ili tuweze kurekebisha hii katika michache ya njia.
Moja, tunaweza kushika ni rahisi na kwa kweli, sasa uko
kwenda kuanza kuona blurring ya mistari kati ya kile
safu ni, nini kamba ni, nini a char nyota ni, nini safu ya chars
ni.
Hapa ni mfano wa pili kuwashirikisha masharti na ilani
zote mimi tumefanya kwenye mstari 16 ni, badala ya kusema
kwamba buffer ni kwenda kuwa Char nyota, pointer chunk ya kumbukumbu,
Mimi nina kwenda proactively sana kutoa mwenyewe buffer kwa 16 wahusika,
na kwa kweli, kama wewe ni ukoo na mrefu buffering,
pengine kutokana na dunia ya video, ambapo video ni buffering, buffering,
buffering.
Naam, nini uhusiano hapa?
Naam, Ndani ya YouTube na ndani ya wachezaji video
ujumla ni safu hiyo ni kubwa kuliko 16.
Ni inaweza kuwa safu ya ukubwa moja megabyte, labda megabytes 10,
na katika safu kwamba anafanya kisakuzi chako download rundo zima la ka,
rundo zima la megabytes ya video, na video mchezaji,
YouTube au mtu ni, kuanza kusoma ka kutoka kwamba safu,
na wakati wowote unaweza kuona neno buffering, buffering,
hiyo ina maana mchezaji ana wamezipata kwa mwisho wa safu.
Mtandao ni hivyo polepole kuwa ina si refilled safu na ka zaidi
na hivyo uko nje ya bits kuonyesha kwa mtumiaji.
>> Hivyo buffer ni mwalimu mwema mrefu hapa nchini kwamba ni tu safu, chunk ya kumbukumbu.
Na hii itakuwa kurekebisha kwa sababu ni zamu nje
uweze kutibu arrays kana kwamba wao ni anwani, hata kama buffer
ni tu ishara, ni mlolongo wa wahusika, buffer,
hiyo ni muhimu kwa ajili yangu, programu, unaweza kupita jina lake kuzunguka
kana kwamba ni pointer, kana kwamba
walikuwa pepe ya chunk ya kumbukumbu kwa 16 chars.
Hivyo hiyo ni kusema, siwezi kupita scanf hasa neno
na hivyo kwa sasa, kama mimi kufanya mpango huu, kufanya scanf 2, dot slash scanf 2,
na aina katika hujambo dunia, Kuingia, kwamba time--
>> Hmm, nini kilitokea?
Kamba tafadhali.
Je, mimi kufanya makosa?
Jambo dunia, buffer.
Salamu, Dunia.
Ah, najua nini ni kufanya.
SAWA.
Hivyo ni kusoma juu mpaka nafasi ya kwanza.
Basi hebu kudanganya kwa muda tu na kusema mimi nilitaka aina ya kitu
kweli kwa muda mrefu kama hii ni adhabu kwa muda mrefu hiyo ni moja, mbili, tatu, nne, tano,
sita, saba, nane, tisa, 10, 11, 12, 13, 14, 15, 16.
SAWA.
Kwa hakika ni adhabu kwa muda mrefu.
Basi hukumu hii ni muda mrefu zaidi ya 16 wahusika
na hivyo wakati mimi hit Enter, nini kitatokea?
Naam, katika kesi hii ya hadithi, mimi alikuwa ametangaza buffer
kwa kweli kuwa safu na 16 chars tayari kwenda.
Hivyo moja, mbili, tatu, nne, tano, sita, saba, nane, tisa, 10, 11, 12, 13, 14,
15, 16.
Hivyo herufi 16, na sasa, wakati mimi kusoma katika kitu kama hii ni ndefu
adhabu, nini kitatokea ni kwamba mimi nina kwenda kusoma katika hili ni ndefu
S-E-N-T-E-N-C-E, hukumu.
>> Hivyo hii ni kwa makusudi Jambo baya ambalo mimi
kuweka kuandika zaidi mipaka ya safu yangu,
nje ya mipaka ya buffer yangu.
Mimi naweza kupata bahati na mpango wataendelea mbio na huduma,
lakini kwa ujumla kuzungumza, hii hakika ajali mpango wangu,
na ni mdudu katika wangu kanuni wakati mimi hatua
nje ya mipaka ya kwamba safu, kwa sababu mimi
sijui kama ni lazima kwenda kwa ajali
au kama mimi nina kwenda tu kupata bahati.
Hivyo hii ni tatizo kwa sababu katika kesi hiyo, haina wanaonekana kazi
na hebu kumjaribu hatma hapa, ingawa IDE inaonekana kuvumilia kidogo kabisa
of--
>> Kuna sisi kwenda.
Hatimaye.
Kwa hiyo mimi nina moja tu kwamba unaweza kuona hili.
Hivyo mimi tu alikuwa na mengi ya furaha kuandika nje halisi kweli kwa muda mrefu maneno
kwamba ni hakika ilizidi 16 ka, kwa sababu mimi
typed katika hii mambo ya muda mrefu mbalimbali line maneno, na kisha taarifa ya kile kilichotokea.
Mpango walijaribu uchapishaji ni na kisha got segmentation kosa
na segmentation makosa ni wakati kitu kama hii kinatokea
na mfumo wa uendeshaji anasema hapana, hawezi kugusa kwamba kumbukumbu.
Tunakwenda kuua Mpango kabisa.
>> Hivyo hii inaonekana tatizo.
Nimekuwa kuboresha mpango ambapo angalau kuwa baadhi ya kumbukumbu,
lakini hii inaweza kuonekana kuunda kazi GetString na kupata
masharti ya baadhi ya urefu mahususi 16.
Hivyo kama unataka kusaidia tena hukumu ya 16 wahusika,
unafanya nini?
Naam, unaweza kuongeza ukubwa wa buffer huu kwa 32
au kwamba inaonekana aina ya muda mfupi.
Mbona sisi tu kufanya ni 1,000 lakini kushinikiza nyuma.
Nini majibu shirikishi wa tu kuepuka tatizo hili kwa kufanya
buffer yangu kubwa, kama chars 1000?
Kwa kutekeleza GetString kwa njia hii.
Nini kizuri au kibaya hapa?
Yeah?
Watazamaji: Kama wewe kufunga zile kura ya nafasi na huna matumizi yake,
basi huwezi reallocate nafasi hiyo.
DAVID Malan: Kabisa.
Ni fujo kadiri kama huna kweli haja ya ka wale 900
na bado wewe ni kuuliza kwa 1,000 katika jumla anyway,
wewe ni kuteketeza kumbukumbu zaidi juu tu kompyuta ya mtumiaji kuliko unahitaji,
na baada ya yote, baadhi ya umefanya tayari yaliyojitokeza
katika maisha kwamba wakati uko mbio kura ya mipango
na wao ni kula up kura ya kumbukumbu, huu unaweza kweli kuathiri utendaji
na mtumiaji uzoefu kwenye kompyuta.
Hivyo hiyo ni aina ya ufumbuzi wavivu, kwa hakika, na kinyume chake,
ni fujo tu, tatizo ni nini bado, hata kama mimi kufanya buffer yangu
1,000?
Yeah?
>> Watazamaji: kamba ni urefu 1,001.
DAVID Malan: Hasa.
Kama kamba yako ni urefu 1,001, una halisi tatizo moja,
na kwa hoja yangu, napenda tu kisha kufanya hivyo mwaka 2000,
lakini nyinyi hamjui katika kuendeleza jinsi kubwa ni lazima,
na bado, sijui na kukusanya mpango wangu kabla ya kuruhusu watu kutumia na download
yake.
Hivyo hii ni hasa aina ya mambo ambayo CS50 maktaba inajaribu
kutusaidia kwa na tutaweza mtazamo tu katika baadhi ya utekelezaji ya msingi
hapa, lakini hii ni CS50 nukta C. Hii ni faili kwamba imekuwa juu ya CS50 IDE
wiki hizi zote kwamba tumekuwa kutumia.
Ni kabla ya ulioandaliwa na wameweza wamekuwa wakitumia ni moja kwa moja
kwa asili ya kuwa na dash L CS50 bendera na Clang,
lakini kama mimi kitabu chini kwa njia zote za kazi hizi, hapa ni GetString,
na tu kukupa ladha ya nini kinaendelea,
hebu tuangalie kwa haraka katika utata jamaa.
Siyo super muda mrefu kazi, lakini hatukuwa
Una kufikiri zote kwa bidii juu jinsi ya kwenda juu ya kupata masharti.
>> Hivyo hapa ni buffer wangu na mimi inaonekana initialize kwa null.
Hii, bila shaka, ni kitu kimoja kama Char nyota,
lakini niliamua katika utekelezaji wa maktaba CS50
kwamba kama tunakwenda kuwa nguvu kabisa,
Sijui mapema jinsi kubwa ya watumiaji kamba wanaenda wanataka kupata.
Hivyo nina kwenda kuanza na kamba tu tupu
na mimi nina kwenda kujenga kama kiasi kumbukumbu kama nahitaji walionao kamba user
na kama sina kutosha, mimi nina kwenda kuuliza
mfumo wa uendeshaji kwa ajili ya kumbukumbu zaidi.
Mimi nina kwenda kutoa hoja zao kamba ndani ya chunk kubwa ya kumbukumbu
na mimi nina kwenda kutolewa au bure chunk isiyotosheleza kikubwa cha kumbukumbu
na tunakwenda tu kufanya hivyo iteratively.
>> Hivyo mtazamo wa haraka, hapa tu kutofautiana
na ambayo mimi nina kwenda kuweka wimbo uwezo wa buffer yangu.
Jinsi wengi ka naweza fit?
Hapa ni kutofautiana n na ambayo mimi nina kwenda kuweka
wimbo wa jinsi wengi ka ni kweli katika buffer au kwamba mtumiaji typed.
Kama wameweza si hii kuona mbele, wewe Unaweza kutaja kwamba kutofautiana kama int
ni unsigned, ambayo kama jina la kupendekeza, ina maana ni yasiyo ya hasi, na kwa nini
Mimi milele wanataka kujisumbua inayobainisha kuwa int sio tu int,
lakini ni unsigned int?
Ni int mashirika yasiyo ya hasi.
Je [inaudible] ina maana gani?
>> Watazamaji: Ni kuelezea kiasi ya kumbukumbu ambayo inaweza kuwa [inaudible].
>> DAVID Malan: Yeah.
Hivyo kama mimi kusema unsigned, hii ni kweli kutoa hata kidogo ya kumbukumbu ya ziada
na inaonekana aina ya silly, lakini kama wewe kuwa moja kidogo ya kumbukumbu za ziada, kwamba
ina maana kuwa mara mbili kama wengi maadili unaweza kuwakilisha,
sababu inaweza kuwa 0 au 1.
Hivyo kwa default, int inaweza kuwa takribani hasi bilioni 2 njia yote
hadi chanya bilioni 2.
Hayo ni kati kubwa, lakini ni bado aina ya fujo
kama wewe tu huduma ya juu ukubwa, ambayo tu intuitively
lazima zisizo hasi au chanya au 0, vizuri basi,
mbona kupoteza bilioni 2 maadili inawezekana kwa idadi hasi
kama wewe ni kamwe kwenda kutumia yao?
Hivyo kwa kusema unsigned, sasa int wangu anaweza kuwa kati ya 0 na takribani bilioni 4.
>> Hivyo hapa ni tu int C kwa sababu za sisi si kupata katika tu sasa kama
kwa nini ni int badala ya Char, lakini hapa ni
kiini cha nini kinaendelea juu, na baadhi yenu
yapate kutumia, kwa mfano, kazi fgetc hata katika pset nne
au baada ya hapo, tutaweza kuona ni tena katika tatizo kuweka tano,
fgetc ni nzuri kwa sababu kama jina aina ya, aina ya arcanely unaonyesha,
ni kazi ambayo anapata tabia na hivyo,
nini tofauti kimsingi kuhusu nini sisi ni kufanya katika GetString
ni sisi siyo kutumia scanf kwa njia sawa.
Sisi ni mnyama tu pamoja hatua kwa hatua zaidi ya chochote mtumiaji typed katika,
kwa sababu tunaweza daima kutenga moja Char, na hivyo tunaweza daima salama
kuangalia char moja kwa wakati mmoja, na uchawi kuanza kutokea hapa.
Mimi nina kwenda kitabu chini ya katikati ya kazi hii
tu kuanzisha ufupi kazi hii.
Kiasi kama kuna malloc kazi, kuna
realloc kazi ambapo realloc inakuwezesha reallocate chunk ya kumbukumbu
na kufanya hivyo kubwa au ndogo.
Hadithi hiyo kwa muda mrefu fupi na kwa wimbi la mkono wangu kwa leo,
tunajua kwamba kile GetString anafanya ni ni aina
ya magically kuongezeka au kushuka buffer kama mtumiaji
aina katika kamba yake.
>> Hivyo kama mtumiaji aina kamba fupi, kanuni huu
tu kutenga kutosha kumbukumbu na kifafa kamba.
Kama mtumiaji anaendelea kuandika kama mimi alifanya hivyo tena na tena
na tena, vizuri, kama buffer ya awali hii kubwa
na mpango anatambua, kwa kusubiri dakika, mimi nina nje ya nafasi,
itakuja mara mbili ukubwa wa buffer
na kisha mara mbili ya ukubwa wa buffer na kificho kwamba anafanya mara dufu,
kama sisi kuangalia ni hapa, ni tu hii wajanja mmoja mjengo.
Unaweza kuwa na kuonekana syntax hii kabla, lakini kama wewe kusema nyota ni sawa na,
hii ni kitu kimoja kama akisema uwezo mara 2.
Hivyo ni kuvaa tu mara dufu uwezo wa buffer
na kisha kuwaambia realloc kutoa yenyewe kwamba kumbukumbu mengi zaidi.
>> Sasa, kama kando, kuna ni kazi nyingine katika hapa
kwamba sisi si kuangalia ndani ya maelezo yoyote zaidi ya kuonyesha katika GetInt,
sisi kutumia GetString katika GetInt.
Sisi kuangalia kwamba siyo null, ambayo, kukumbuka,
ni thamani maalum kwamba ina maana kitu potoka.
Tuko nje ya kumbukumbu.
Bora kuangalia kwa ajili hiyo.
Na sisi kurudi thamani mwangalizi.
Lakini mimi itabidi kuahirisha kwa maoni kama kwa kwa nini na kisha sisi kutumia binamu hii ya scanf
aitwaye sscanf na ni zamu nje kwamba sscanf, au kamba scanf,
inakuwezesha tuangalie mstari kwamba mtumiaji typed katika na basi wewe
kuchambua kimsingi na kile mimi nina kufanya hapa ni mimi nina kuwaambia sscanf,
kuchambua chochote mtumiaji ana typed katika na kuhakikisha% i,
kuna integer ndani yake, na sisi si kupata katika leo kwa nini hasa pale pia
% c hapa, lakini hiyo kwa kifupi inaruhusu sisi kuchunguza kama mtumiaji typed
katika kitu bogus baada idadi.
Hivyo sababu hiyo GetInt na GetString kukuambia kujaribu tena, jaribu tena, jaribu tena
Ni kwa sababu ya yote ya kwamba kanuni tumekuwa imeandikwa,
ni aina ya kuangalia pembejeo mtumiaji katika kuhakikisha ni kabisa numeric
au ni floating halisi hatua thamani au kama,
kulingana na thamani gani kazi unatumia.
>> Whew.
SAWA.
Hiyo ilikuwa ni Mouthful lakini uhakika hapa ni
kwamba sababu tulikuwa na wale magurudumu mafunzo juu ya
ni kwa sababu katika ngazi ya chini, kuna tu mambo mengi ambayo
yanaweza kwenda vibaya kwamba tulitaka kwa preemptively kushughulikia
mambo hayo kwa hakika katika wiki ya kwanza ya darasa,
lakini sasa kwa pset nne na pset tano na zaidi ya wewe kuona kwamba ni zaidi hata
wewe lakini pia wewe uwezo zaidi ya kutatua hayo aina ya matatizo
wewe mwenyewe.
Maswali yoyote juu ya GetString au GetInt?
Yeah?
>> Watazamaji: Kwa nini wewe mara mbili uwezo wa buffer
badala ya kuongeza tu hivyo kwa kiasi halisi?
>> DAVID Malan: swali nzuri.
Kwa nini sisi mara mbili ya uwezo ya buffer kinyume
tu kuongeza kuwa na baadhi ya thamani ya mara kwa mara?
Ilikuwa ni uamuzi wa kubuni.
Sisi tu aliamua kwamba kwa sababu inaelekea kuwa ni kidogo ghali wakati-busara kuuliza
mfumo wa uendeshaji kwa kumbukumbu, hatukuwa
wanataka kuishia kupata katika Hali kwa masharti kubwa
kuwa tulikuwa kuuliza OS tena na tena
na tena na tena katika mfululizo wa haraka kwa ajili ya kumbukumbu.
Hivyo sisi tu aliamua, kwa kiasi fulani kiholela lakini tunatarajia sababu,
kwamba, unajua nini, hebu kujaribu kupata mbele ya sisi wenyewe
na kuweka tu mara dufu hivyo ili sisi kupunguza kiasi cha mara
tuna kuwaita malloc au realloc, lakini hukumu jumla
piga kutokana na kukosekana kwa kujua nini watumiaji kutaka aina katika.
Njia zote mbili inaweza kuwa arguable.
Arguably nzuri.
>> Basi hebu tuangalie michache ya madhara mengine ya kumbukumbu,
mambo ambayo yanaweza kwenda vibaya na zana kwamba unaweza
kutumia kukamata aina hii ya makosa.
Ni zinageuka nyote, hata kama check50 hana niliwaambia kama kiasi,
wamekuwa kuandika buggy kificho tangu wiki moja,
hata kama vipimo wote check50 ni kupita, na hata kama wewe na TF yako
ni super na imani kwamba kanuni yako anafanya kazi kama ilivyokusudiwa.
Kanuni yako imekuwa buggy au kiujanja kwa kuwa nyote,
katika kutumia maktaba CS50, wamekuwa kuvuja kumbukumbu.
Tumekuwa kuuliza mfumo wa uendeshaji kwa kumbukumbu katika zaidi ya mipango
umefanya imeandikwa, lakini wameweza kamwe kweli kutokana na nyuma.
Umetumia GetString na GetInt na GetFloat,
lakini kwa GetString, wameweza kamwe kuitwa unGetString au Kutoa
Kamba Nyuma au kama, lakini tumeona kwamba GetString gani kutenga kumbukumbu
kwa njia ya malloc au hii kazi realloc, ambayo ni tu
sawa sana katika ulimwengu wa kiroho, na bado, tumekuwa
kuuliza mfumo wa uendeshaji kwa kumbukumbu na kumbukumbu tena na tena
lakini kamwe kutoa ni nyuma.
>> Sasa, kama kando, zinageuka kuwa wakati mpango quits, wote wa kumbukumbu
ni moja kwa moja huru.
Hivyo si kuwa mpango kubwa.
Ni si kwenda kuvunja IDE au polepole mambo ya chini,
lakini wakati mipango kufanya ujumla kuvuja kumbukumbu
na wao ni mbio kwa muda mrefu.
Kama wameweza milele kuonekana kijinga kidogo beach mpira katika Mac OS au hourglass
juu ya Windows ambapo ni aina ya kupunguza chini au kufikiri au mawazo
au tu kwa kweli kuanza kupunguza kwa kutambaa,
ni uwezekano sana inaweza kuwa Kutokana na kumbukumbu kuvuja.
Programmers aliyeandika programu unatumia
kuuliza mfumo wa uendeshaji kwa ajili ya kumbukumbu kila baada ya dakika chache, kila saa.
Lakini kama wewe ni mbio programu, hata kama ni
kupunguzwa katika kompyuta yako kwa masaa au siku ya mwisho,
unaweza kuwa kuomba zaidi na zaidi kumbukumbu na kamwe kweli kutumia
na hivyo kanuni yako inaweza kuwa, au mipango inaweza kuwa kuvuja kumbukumbu,
na kama kuanza kuvuja kumbukumbu, kuna chini ya kumbukumbu kwa programu nyingine,
na athari ni kwa kupunguza kila kitu chini.
>> Sasa, hii ni kwa mbali moja ya programu nyingi za mauaji
utakuwa na fursa kuendesha katika CS50 kadiri
kama matokeo yake ni hata zaidi kuliko ya wachache Clang au kufanya au yoyote ya amri
mipango mstari tumekuwa kukimbia kabla lakini nashiriki, iliyoingia katika pato lake
ni baadhi ya vidokezo super kusaidia kwamba itakuwa muhimu ama kwa pset nne
au kwa hakika pset tano.
Hivyo Valgrind ni chombo ambazo zinaweza kutumika kwa kuangalia
kwa uvujaji kumbukumbu katika mpango wako.
Ni rahisi kuendesha.
Kukimbia Valgrind na kisha, hata ingawa ni verbose kidogo,
dash dash kuvuja kuangalia sawa kamili, na kisha dot
kufyeka na jina la mpango wako.
Hivyo Valgrind mapenzi kisha kukimbia mpango wako na mwishoni sana ya mpango wako
mbio kabla quits na anatoa mwingine haraka,
itakuja kuchambua yako Mpango wakati imekuwa ni mbio
na kukuambia gani kuvuja kumbukumbu yoyote na bado bora,
je kugusa kumbukumbu kwamba hawakuwa wa wewe?
Haiwezi kukamata kila kitu, lakini ni nzuri katika kuambukizwa mambo mengi.
>> Hivyo hapa ni mfano wa kuwa na kukimbia yangu mpango huu, baada ya kukimbia Valgrind,
juu ya mpango ujulikanao kumbukumbu, na mimi nina kwenda
kuonyesha mistari kwamba ni hatimaye ya riba na sisi.
Hivyo kuna usumbufu hata zaidi kwamba nimepata kufutwa kutoka slide.
Lakini hebu tu kuona nini hii mpango ni uwezo wa kutuambia.
Ni uwezo wa kutuambia mambo kama batili kuandika ya ukubwa 4.
Kwa maneno mengine, kama wewe kugusa kumbukumbu, hasa ka 4 ya kumbukumbu
kwamba unapaswa kuwa, Valgrind anaweza kukuambia kwamba.
Kuandika batili ya ukubwa 4.
Wewe kuguswa ka nne kwamba unapaswa kuwa.
Wapi unaweza kufanya hivyo?
Hii ni uzuri.
Kumbukumbu nukta c mstari 21 ni wapi Star up na hii ndiyo sababu ni manufaa.
Kiasi kama GDB, inaweza kusaidia uhakika wewe katika kosa halisi.
>> Sasa, hii moja zaidi kidogo verbose, kama si utata.
Ka 40 katika 1 vitalu ni dhahiri waliopotea katika hasara rekodi ya 1 ya 1.
Hiyo ina maana gani?
Naam, ni njia tu wewe aliuliza kwa Ka 40 na kamwe akampa.
Wewe kuitwa malloc au wewe kuitwa GetString na mfumo wa uendeshaji
aliwapa 40 ka, lakini kamwe huru au iliyotolewa kwamba kumbukumbu,
na kuwa wa haki, tumekuwa kamwe kuonyesha jinsi ya kutoa nyuma kumbukumbu.
Zinageuka kuna super kazi rahisi kuitwa bure.
Inachukua moja hoja, jambo unataka bure au kutoa nyuma,
lakini 40 ka, inaonekana, katika mpango huu
zimepotea katika mstari 20 ya kumbukumbu dot c.
>> Basi hebu angalia mpango huu.
Ni super maana.
Ni tu inaonyesha makosa fulani.
Hivyo hebu tuangalie.
Hapa ni kuu na kuu, ilani, wito kazi kuitwa f na kisha anarudi.
Hivyo si yote ya kuvutia.
Je f nini?
Taarifa Sikutaka kwa mfano.
Nilitaka kuendelea kificho kama ndogo kama iwezekanavyo.
Hivyo mimi kuweka f juu kuu na hiyo ni nzuri, hakika,
kwa mipango ya muda kama hii.
Hivyo f haina kurudi chochote na anafanya kuchukua kitu chochote, lakini haina kufanya hivyo.
Inatangaza, kiasi kama katika mfano Binky,
pointer kuitwa x ambayo inaenda kuhifadhi pepe ya int.
Hivyo hiyo ni upande wa mkono wa kushoto.
Katika lugha ya Kiingereza, ni nini mkono wa kulia upande kufanya?
Mtu yeyote?
Ni nini hii kufanya kwa ajili yetu?
Yeah?
>> Watazamaji: [inaudible] Mara ukubwa wa int
ambayo ni mara 10 kwamba [inaudible]
DAVID Malan: nzuri na napenda kujumlisha.
Hivyo kutenga nafasi ya kutosha kwa ajili ya 10 integers au 10, nini ukubwa wa int,
ni ka nne, hivyo mara 10 4 ni 40, ili upande wa kulia kwamba nimekuwa
yalionyesha ni nipe 40 ka na kuhifadhi anuani ya Byte kwanza
ndani ya x.
Na sasa mwisho, na hapa ndipo mpango huu ni Buggy, nini
kibaya na mstari 21 kulingana na mantiki hiyo?
Nini mbaya na mstari 21?
Yeah?
Watazamaji: Unaweza si ripoti katika x [inaudible].
DAVID Malan: Yeah.
Mimi hawapaswi ripoti katika x kama hicho.
Hivyo syntactically, hiyo ni sawa.
Nini ni nzuri ni, kiasi kama wewe unaweza kutibu jina la safu
kana kwamba ni pointer, vile vile Unaweza kutibu pointer kana kwamba ni
safu, na hivyo naweza syntactically kusema x mabano kitu, x mabano i,
lakini 10 ni tatizo.
Kwa nini?
>> Watazamaji: Kwa sababu si ndani.
>> DAVID Malan: Siyo ndani ya kwamba chunk ya kumbukumbu.
Nini thamani kubwa ni lazima kuwa na kuweka katika mabano mraba wale?
9, 0 kupitia 9.
Kwa sababu ya sifuri Indexing.
Hivyo 0 kupitia 9 itakuwa nzuri.
Mabano 10 si nzuri na lakini, kukumbuka ingawa, kila wakati
Mimi kuonekana kujaribu kufanya CS50 IDE ajali na kuandika katika maadili bogus,
haina daima kushirikiana, na kwa hakika, wewe mara nyingi
kupata bahati kwa sababu tu mfumo wa uendeshaji haina
taarifa kwamba wewe milele hivyo kidogo kupita baadhi chunk ya kumbukumbu,
kwa sababu wewe walikaa ndani ya kitaalam sehemu yako, lakini zaidi juu ya kwamba
darasani mifumo ya uendeshaji, na hivyo kitu kama hii
inaweza kwa urahisi sana kwenda bila kutambulika.
Mpango wako kamwe kwenda ajali mara kwa mara lakini labda mara moja katika muda.
>> Na hivyo hebu jaribu Valgrind juu ya hili, na hapa ni
ambapo tutaweza kupata kuzidiwa na pato kwa muda.
Hivyo kufanya kumbukumbu Valgrind kuvuja kuangalia sawa full dot slash kumbukumbu.
Na hapa ni kwa nini mimi ahadi uandikishaji huu utazidi.
Hapa ni nini Valgrind, hapa ni nini programu, baadhi ya miaka iliyopita-
aliamua itakuwa ni wazo nzuri kwa pato kuangalia kama.
Basi hebu kufanya maana ya hii.
Hivyo njia zote juu ya mkono wa kushoto upande kwa sababu hakuna nzuri
Ni utaratibu ID kwa mpango sisi kukimbia tu, kitambulisho kipekee
kwa ajili ya mpango sisi tu mbio.
Sisi kufutwa kwamba kuanzia slide, lakini kuna
ni baadhi ya taarifa muhimu katika hapa.
>> Hebu kitabu hadi juu sana.
Hapa ni wapi sisi kuanza.
Hivyo si yote pato kiasi hicho.
Hapa ni kwamba kuandika batili ukubwa 4 kwenye mstari 21.
Naam, alikuwa mstari 21 nini?
Mstari 21 ilikuwa hasa hii na inafanya hisia
kwamba mimi niko katika kihalali kuandika ka 4 kwa sababu mimi nina
kujaribu kuweka integer hii, ambayo inaweza kuwa kitu chochote,
tu hutokea kwa kuwa sifuri, lakini nina kujaribu
kuiweka katika eneo hiyo haina mali yangu.
Aidha, chini hapa, 40 ka katika moja vitalu ni dhahiri waliopotea katika rekodi 1.
Hii ni kwa sababu wakati mimi wito malloc hapa, mimi kamwe kweli huru kumbukumbu.
>> Hivyo ni jinsi gani tunaweza kurekebisha hili?
Hebu kwenda mbele na kuwa salama kidogo na kufanya 9 huko na napenda hapa bure x.
Hii ni kazi mpya kwa leo.
Kama mimi sasa rerun kufanya kumbukumbu dot slash, hebu kukimbia Valgrind juu yake tena,
kuongeza dirisha yangu na kugonga kuingia.
Sasa, ni nzuri.
Wao kuzika habari njema katika yote ya pato hili.
Vitalu wote lundo walikuwa huru.
Tutaweza kurudi kwa kile chungu ni, lakini hakuna uvujaji yanawezekana.
Hivyo hii ni tu mwingine chombo kwa ajili ya chombo kit yako
na ambayo unaweza kuanza kupata sasa makosa kama hayo.
>> Lakini hebu angalia nini zaidi yanaweza kwenda vibaya hapa.
Hebu mpito sasa kwa kweli kutatua tatizo.
Kama kando, kama hii itakuwa kupunguza kidogo ya kuchanganyikiwa au mvutano,
hii sasa ni funny.
Naam.
Hiyo ni nzuri sana.
Kwa sababu kuyatumia ni anwani na anwani
kwa ujumla kwa mkataba imeandikwa na hexadesimoli.
Ha, ha, hii ni funny sasa.
Hata hivyo, hivyo hebu sasa kweli kutatua tatizo.
Hii imekuwa super, super ngazi ya chini hivi sasa,
na tunaweza kweli kufanya muhimu mambo kwa maelezo haya ngazi ya chini.
>> Hivyo sisi ilianzisha wiki chache iliyopita dhana ya safu.
Safu ilikuwa nzuri kwa sababu ni vigumu kusafisha kificho wetu
kwa sababu kama sisi alitaka kuandika mpango na wanafunzi mbalimbali
au majina mbalimbali na nyumba na dorms na vyuo na yote hayo,
tunaweza kuhifadhi kila kitu zaidi cleanly ndani ya safu.
Lakini kupendekeza upande wa chini moja wa safu hivi sasa.
Hata kama umefanya si mateso mwenyewe katika mpango, tu instinctively,
kile ni kitu mbaya kuhusu safu, labda?
Nasikia baadhi murmurs.
Watazamaji: Ni vigumu na mabadiliko ya kawaida.
DAVID Malan: Ni vigumu na mabadiliko ya kawaida.
Huwezi kubadili ukubwa wa safu, kwa kweli, per se
katika C. Unaweza kutenga safu mwingine, hoja ya kila kitu kutoka moja ya zamani
ndani ya mwezi, na sasa kuwa na baadhi ya nafasi ya ziada,
lakini si kama lugha kama Java au chatu
au idadi yoyote ya wengine Lugha ambazo baadhi yenu
inaweza kuwa na mazoea ambapo unaweza tu kuendelea kuongeza vitu
ad nauseam hadi mwisho wa safu.
Wakati una safu ya ukubwa 6, kwamba ni kawaida yake,
na hivyo kama wazo mapema kuwa buffer ya ukubwa fulani,
una nadhani nje ya lango kile kawaida unataka kuwa ni?
Kama wewe nadhani kubwa mno, wewe ni kupoteza nafasi.
Kama wewe nadhani ndogo mno, wewe hawezi kuhifadhi data kwamba, angalau
bila mengi zaidi kazi.
>> Hivyo leo, shukrani kwa kuyatumia, tunaweza kuanza wakitengeneza pamoja desturi yetu wenyewe
miundo data, na katika kweli, hapa ni kitu
kwamba inaonekana zaidi kidogo cryptic katika mtazamo wa kwanza,
lakini hii ni nini Tutamwita wanaohusishwa orodha, na jina lake aina ya muhtasari
yake.
Ni orodha ya namba, au katika kesi hiyo, orodha ya namba,
lakini inaweza kuwa orodha ya kitu chochote, lakini ni wanaohusishwa pamoja na njia ya mishale,
na tu kuchukua nadhani na kile mbinu
sisi ni kwenda kuwa na uwezo kushona pamoja,
aina ya kama popcorn na thread, wanaohusishwa orodha mistatili hapa?
Idadi yake?
Nini lugha ya msingi kipengele?
>> Watazamaji: pointer.
>> DAVID Malan: pointer.
Hivyo kila mmoja mishale hizi hapa inawakilisha pointer au tu mahali.
Hivyo kwa maneno mengine, kama nataka kuhifadhi orodha ya namba,
Siwezi tu kuhifadhi kama nataka uwezo wa kukua na kuogopa
muundo wa data zangu katika safu.
Hivyo mimi haja ya kuwa na kidogo sophistication zaidi,
lakini taarifa kwamba hii picha aina ya unaonyesha
kwamba kama wameweza tu got nyuzi kidogo kuunganisha kila kitu pamoja,
pengine ni kwamba ngumu ya kutengeneza nafasi katika kati ya mbili ya mistatili wale
au mbili ya nodes hizo, kama tutaweza kuanza kuwaita, kuweka katika nodi mpya,
na kisha kwa baadhi uzi mpya, tu shimoni nodes tatu kwa pamoja,
moja ya kwanza, moja ya mwisho, na moja kwamba wewe tu kuingizwa katika katikati.
>> Na hakika orodha wanaohusishwa, tofauti na safu, ni nguvu.
Inaweza kukua na inaweza kuogopa na huna
una kujua au huduma mapema jinsi data kiasi gani ni kwenda kuwa hifadhi,
lakini zinageuka tuna kuwa kidogo makini kuhusu jinsi ya kutekeleza hili.
Hivyo kwanza hebu fikiria jinsi sisi kutekeleza mmoja wa haya mistatili kidogo.
Ni rahisi kutekeleza int.
Wewe tu kusema int n na kisha kupata ka 4 kwa int,
lakini jinsi gani mimi kupata int, simu yake n, na kisha pointer, hebu simu yake ijayo.
Tunaweza kuwaita hawa mambo chochote tunataka
lakini nahitaji muundo data desturi.
Yeah?
>> Watazamaji: Ampersand [inaudible].
>> DAVID Malan: Hivyo ampersand tutatumia kupata pepe ya nodi uwezekano.
Lakini tunahitaji mwingine hulka ya C ili
kunipa uwezo wa kujenga hii Mstatili desturi, desturi hii
kutofautiana kama wewe, katika kumbukumbu.
Watazamaji: struct.
DAVID Malan: struct.
Kumbuka kutoka wiki iliyopita, sisi ilianzisha struct, hii keyword rahisi
kwamba unatuwezesha kufanya mambo kama hayo.
C hakuwa na kuja na data muundo inayoitwa mwanafunzi.
Ni huja na int na kuelea na char na vile, lakini haina kuja na mwanafunzi,
lakini tunaweza kujenga aina mwanafunzi data, mwanafunzi muundo, na syntax hii
hapa.
Na utaona hii tena na tena.
Hivyo msiwe na wasiwasi juu kukariri maneno,
lakini keyword hiyo ni muhimu ni tu ukweli kwamba sisi alisema struct
na kisha sisi kuitwa ni mwanafunzi na ndani ya ya mwanafunzi alikuwa na jina na nyumba
au Dorm au kama.
>> Na hivyo sasa leo, hebu kupendekeza hii.
Nimekuwa aliongeza maneno machache, lakini kama nataka kutekeleza hili Mstatili hiyo ni
got wote int na pointer, unajua nini, mimi nina
kwenda kutangaza struct nodi aitwaye.
Mimi pia, ndani yake, kwenda kusema kwamba nodi, mstatili hii, ina int
na tutaweza simu yake n na ina pointer ijayo.
Na hii ni kidogo verbose, lakini kama wewe kufikiri juu yake,
mishale waliokuwa katika picha wakati iliyopita ni wa nini data aina?
Ambapo kila mmoja wa wale mishale ni akizungumzia kwa aina gani ya muundo wa data?
Siyo akizungumzia tu int per se.
Ni akizungumzia zima mstatili kitu
na kwamba jambo mstatili, tulivyosema, inaitwa nodi.
Na hivyo sisi aina ya kuwa na recursively kufafanua hii kama
kwamba nodi, tukisema, vyenye int kuitwa n
na pointer iitwayo ijayo na aina ya muundo data ambayo
kwamba pointi pointer ni inaonekana kwenda kuwa nodi struct.
>> Hivyo hii ni annoyingly verbose na tu kuwa pedantic,
sababu ni kwa nini hatuwezi tu kusema hii, ambayo kusema ukweli
inaonekana mengi zaidi someka, ni kwa sababu wanakumbuka kwamba C kusoma
mambo juu hadi chini, kushoto na kulia.
Siyo mpaka sisi kupata semicolon kwamba nodi keyword kweli lipo.
Hivyo kama tunataka kuwa na aina hii ya kumbukumbu mzunguko ndani ya takwimu
muundo, tuna kufanya hivyo, ambapo tunasema struct nodi juu, ambayo
inatupa njia tena ya kuelezea hii Jambo, basi ndani ya tunasema struct nodi,
na kisha katika mstari wa mwisho sana tunasema, sawa, C, kwa njia,
wito tu damn hili lote Jambo nodi na kuacha
kutumia keyword struct kabisa.
Hivyo hii ni tu aina ya kisintaksia hila kwamba hatimaye unatuwezesha kujenga
kitu ambacho inaonekana hasa kama hii.
>> Hivyo kama sisi kudhani sasa tunaweza kutekeleza jambo hili katika C,
jinsi gani sisi kweli kuanza apitaye hii?
Naam, kwa kweli, wote sisi kufanya ni iterate kutoka kushoto kwenda kulia na tu
aina ya kuingiza nodes nodes au kufuta au kutafuta mambo popote tunataka,
lakini kwa kufanya hivyo, hebu kwenda mbele na kufanya mambo madogo zaidi halisi kwa sababu hii
imekuwa super ngazi ya chini hivi sasa.
Je, mtu yeyote literally kama kuwa ya kwanza?
SAWA.
Kuja juu juu.
Jina lako ni nini?
>> DAVID: David.
DAVID Malan: Daudi.
Vyema kukutana na wewe.
Mimi pia.
Sawa.
Na tunahitaji namba 9.
Siyo mazuri kama ya kwanza, labda.
Sawa, namba 9.
Namba 17, tafadhali.
Hebu nirejee nyuma kidogo.
Idadi 22, tafadhali, na vipi kuhusu mbali nyuma
kama ninaweza kuona mikono yoyote pamoja na yote mwanga au hapana.
Mtu ni kuwa alijitolea pale pale.
Je, unataka kuja?
Forearm yako ni nguvu ya kwenda juu.
OK, 17.
22.
26 ni kuja chini.
Je, mtu mwingine kama forcefully-- Haya up.
Kujitolea halisi.
>> Kwa hiyo kwa haraka sana, kama nyie wanaweza kupanga
wenyewe tu kama nodes kwenye screen.
Asante.
Na wewe utakuwa na 26.
Haki na ya haraka zote utambulisho.
Kwa hiyo mimi nina David na wewe ni pia?
DAVID: David.
DAVID Malan: Na wewe ni?
JAKE: Jake.
SUE: Sue.
ALEX: Alex.
RAPHAEL: Raphael.
TAYLOR: Taylor.
DAVID Malan: Taylor.
Bora.
Basi hizi ni kujitolea yetu kwa leo na kwenda mbele
na kuhama kidogo kwa njia hiyo, na tu kwenda mbele na kuweka
kufanya idadi yako kama wewe ni au yako ishara ya kwanza na kutumia mkono wako wa kushoto,
kwenda mbele na kutekeleza tu mishale hizi, tu
ili mkono wako wa kushoto ni halisi akionyesha chochote unapaswa uhakika
katika, na kutoa mwenyewe baadhi chumba ili tunaweza kuibua kuona mikono yako kweli
akizungumzia, na unaweza kumweka tu aina ya katika ardhi ni nzuri.
>> Hivyo hapa tuna orodha wanaohusishwa ya moja, mbili, tatu, nne, tano nodes awali,
na taarifa tuna hii maalum pointer mwanzoni ambaye ni
ufunguo kwa sababu tuna kuweka wimbo ya zima urefu orodha namna fulani.
Haya guys, ingawa wao ni wa kushoto na haki, nyuma kwa nyuma katika kumbukumbu,
kwa kweli wanaweza kuwa mahali popote katika kumbukumbu ya kompyuta.
Hivyo guys haya inaweza kuwa amesimama mahali popote juu ya hatua
na hiyo ni nzuri, hivyo muda mrefu kama wao ni kweli akionyesha mtu mwingine,
lakini kuweka mambo safi na rahisi, tutaweza
tu kuteka yao kwa haki kama kushoto hii, lakini kuna inaweza kuwa mapengo mkubwa
katika kati ya nodes hizo.
>> Sasa, kama nataka kwa kweli kuingiza baadhi thamani mpya, hebu kwenda mbele na kufanya hili.
Tuna fursa sasa kuchagua nodi mwingine.
Kusema hebu kuanza mbali na mallocing 55.
Je, mtu akili kuwa malloc?
OK, kuja juu juu.
Jina lako ni nini?
RAINBOW: Rainbow.
DAVID Malan: Rainbow?
Sawa.
Malloc Rainbow.
Kuja juu juu.
Hivyo basi, tuna kujiuliza algorithmically ambapo tunaweza kuweka 55.
Hivyo sote tunajua, ni wazi, ambapo yeye pengine
ni mali ikiwa sisi ni kujaribu kuweka hii yamepangwa
na kama wewe guys inaweza kuchukua moja kurudi nyuma hivyo hatuna kuanguka mbali
hatua, kwamba itakuwa kubwa.
Hivyo kweli, Rainbow, kuanza juu hapa na mimi,
kwa sababu sisi kama kompyuta sasa unaweza tu kuona kutofautiana moja kwa wakati mmoja.
Hivyo kama hii ni nodi kwanza.
Taarifa yeye si nodi, yeye tu pointer,
na hii ndiyo sababu yeye inayotolewa kuwa tu ukubwa wa pointer, si
moja ya mistatili wale full.
Hivyo sisi ni kwenda kuangalia katika kila iteration ni 55 chini ya 9?
Hakuna
Ni 55 chini ya 17?
Hakuna
Chini ya 22?
Chini ya 26?
Chini ya 34?
Na hivyo sasa, ni wazi Rainbow mali mwishoni.
Hivyo kuwa wazi, na kile ilikuwa jina lako, Taylor?
>> TAYLOR: Taylor.
DAVID Malan: Hivyo miongoni mwa Taylor mkono wa kushoto na mikono Rainbow ya hapa,
mkono ambao mahitaji ya uhakika katika kile katika ili kuingiza 55 katika orodha hii?
Tufanye nini haja ya kufanya?
Yeah?
>> Watazamaji: mkono Taylor mahitaji ya uhakika wa kushoto.
>> DAVID Malan: Hasa.
Hivyo kuingiza nodi ndani ya mwisho wa orodha
ni pretty rahisi kwa sababu Taylor tu ana uhakika, badala ya kwenye uwanja
au tutaweza simu yake null, null ni aina ya kukosekana
ya pointer au maalum sifuri pointer, uko
kwenda kwa uhakika na kushoto yako mkono katika Rainbow na kisha Rainbow,
ambapo lazima kushoto yako mkono pengine uhakika?
Chini.
Siyo nzuri kama mkono wake ni aina ya akizungumzia mbali hapa au aina yoyote
ambayo njia.
Ambayo yangeweza takataka thamani,
lakini kama yeye anazungumzia baadhi thamani kujulikana, tutaweza
kuiita sifuri au null, hiyo ni sawa kwa sababu tuna mrefu katika hii
na tunajua orodha sasa ni kamili.
>> Basi nini kingine rahisi kesi?
Je, tunaweza malloc 5?
Kuja juu juu.
Jina lako ni nini?
TIFFANY: Tiffany.
DAVID Malan: Samahani?
TIFFANY: Tiffany.
DAVID Malan: Tiffany.
Sawa.
Tiffany imekuwa malloced kwa thamani ya 5.
Kuja juu juu.
Hii moja rahisi sana, lakini hebu fikiria utaratibu wa shughuli sasa.
Ilikuwa ni rahisi sana na Taylor mwishoni.
Namba 5 ni ya kweli chini ya 9, na hivyo tuna Daudi, tuna Tiffany,
na ilikuwa ni nini jina lako?
>> JAKE: Jake.
>> DAVID Malan: Jake.
Tiffany, Jake, na Daudi.
Ambaye mkononi mwake lazima updated kwanza?
Unataka nini cha kufanya hapa?
Kuna wanandoa njia iwezekanavyo, lakini pia kuna moja au njia sahihi zaidi.
>> Watazamaji: Anza na leftmost.
>> DAVID Malan: Anza na leftmost.
Nani leftmost hapa, basi?
Watazamaji: wa kwanza.
>> DAVID Malan: Sawa.
Hivyo kuanza na kwanza na wapi wewe wanataka update mikono Daudi kuwa?
Watazamaji: Kuelekea 5.
DAVID Malan: Sawa.
Basi Daudi, hatua tano au Tiffany hapa, na sasa?
>> Watazamaji: Tiffany anazungumzia 9?
DAVID Malan: Perfect, isipokuwa Binky ya kichwa tu aina ya ikaanguka, sawa?
Kwa sababu nini mbaya na picha hii literally?
Watazamaji: Hakuna ananyoosha kidole.
DAVID Malan: Hakuna kitu akizungumzia Jake sasa.
Tumekuwa literally yatima 9 na 17, na tumekuwa literally
kuvuja yote ya kumbukumbu hii, kwa sababu kwa kuhuisha mkono wa Daudi kwanza, hiyo ni
faini kadiri ni usahihi akionyesha Tiffany sasa,
lakini kama hakuna mtu alikuwa mtizamo wa kumweka katika Jake,
kisha tumekuwa waliopotea ukamilifu wa orodha hiyo.
Basi hebu kutengua.
Ili kwamba ilikuwa ni jambo jema kwa safari juu lakini hebu kurekebisha sasa.
Tufanye nini kwanza badala yake?
Yeah?
>> Watazamaji: Tiffany lazima uhakika saa 9?
DAVID Malan: Siwezi kupata kuwa karibu na wewe.
Nani anapaswa uhakika saa 9?
>> Watazamaji: Tiffany.
>> DAVID Malan: zote haki.
Hivyo Tiffany lazima hatua ya kwanza katika 9.
Hivyo Tiffany inapaswa kuchukua juu ya thamani sawa
Daudi, ambayo inaonekana kutokuwa na maana kwa muda,
lakini hiyo ni nzuri kwa sababu sasa, pili hatua, sisi anaweza kuweka upya mkono wa Daudi
kwa uhakika katika Tiffany, na kisha kama sisi tu aina ya safi mambo up
kana kwamba hii ni aina ya spring-kama, sasa hiyo ni kuingizwa sahihi.
Hivyo bora.
Hivyo sasa tuko karibu na hapo.
Hebu kuingiza mwisho moja thamani kama thamani 20.
Kama tunaweza malloc kujitolea moja ya mwisho?
Kuja juu juu.
Hivyo hii moja ni gumu zaidi kidogo.
Lakini kwa kweli, kanuni na tuko kuandika, angalau kwa maneno,
ni kama kuwa na kundi ya kama hali sasa, sawa?
Tulikuwa na hali kuangalia kama ni mali
mwishoni, labda mwanzo.
Tunahitaji baadhi ya aina ya kitanzi kwa kupata doa katikati.
Basi hebu kufanya hivyo kwa nini jina lako?
>> ERIC: Eric.
>> DAVID Malan: Eric?
Eric.
Vyema kukutana na wewe.
Hivyo tuna 20.
Chini ya miaka mitano?
Hakuna
Chini ya tisa?
Hakuna
Chini ya 17?
Hakuna
SAWA.
Yeye ni hapa na majina yenu tena ni?
SUE: Sue.
DAVID Malan: Sue.
ALEX: Alex.
DAVID Malan: Sue, Alex, na?
ERIC: Eric.
DAVID Malan: Eric.
Mikono ambao wanahitaji kupata updated kwanza?
>> Watazamaji: Eric.
SAWA.
Hivyo Eric inapaswa kumweka katika wapi?
Katika 22.
Nzuri.
Na sasa nini hapo?
Sue wanaweza kisha kumweka katika Eric na sasa, kama nyie tu
kufanya baadhi ya chumba, ambayo ni nzuri kuibua, sasa tumefanya kuingizwa.
Basi hebu sasa kufikiria swali lakini asante sana kwa kujitolea yetu.
Vizuri sana kufanyika.
Unaweza kuweka wale, kama wewe kama.
Na tuna zimefunguliwa zawadi nzuri kama d kila kama kuchukua msongo mpira.
Napenda tu kupita hii chini.
Hivyo ni takeaway ya hii nini?
Hii inaonekana kuwa ajabu kadiri tuna sasa
ilianzisha mbadala kwa safu kwamba si hivyo kufungiwa
kwa safu ya baadhi ya fasta ukubwa.
Wanaweza kukua dynamically.
>> Lakini kiasi kama tumeona katika kipindi cha wiki siku za nyuma, sisi kamwe kupata kitu chochote kwa ajili ya bure,
kama hakika kuna biashara-off hapa.
Hivyo, pamoja na suala la mafanikio ya uhusiano orodha, ni mabadiliko haya?
Uwezo huu wa kukua na kusema ukweli, sisi wangefanya kufuta
na tunaweza kuogopa kama inahitajika.
Nini bei ni sisi kulipa?
Mara mbili kama nafasi sana, kwanza ya yote.
Kama ukiangalia picha, tena Mimi ni kuhifadhi orodha ya integers.
Mimi kuhifadhi orodha ya integers pamoja na kuyatumia.
Hivyo mimi nina mara dufu kiasi cha nafasi.
Sasa, labda si kwamba kama mpango mkubwa ka 4, 8 ka,
lakini inaweza hakika kuongeza up kwa seti kubwa data.
Nini mwingine upande wa chini?
Yeah?
>> Watazamaji: Tuna traverse yao moja kwa moja.
DAVID Malan: Yeah.
Tuna traverse yao moja kwa moja.
Unajua nini, sisi akatoa hii super rahisi hulka ya mraba mabano
nukuu, vizuri zaidi inayojulikana kama random kupata,
ambapo tunaweza tu kuruka kwa kipengele binafsi
lakini sasa kama mimi bado alikuwa kujitolea yangu hapa,
kama nilitaka kupata namba 22, siwezi tu
Rukia mabano kitu kitu.
Nina kuangalia juu ya orodha, sehemu kubwa kama kutafuta yetu mifano kwa mstari,
kupata idadi 22.
Hivyo sisi wanaonekana kuwa na kulipwa bei huko.
Lakini tunaweza hata hivyo kutatua matatizo mengine.
>> Kwa kweli, napenda kuanzisha michache tu ya vielelezo.
Hivyo kama wewe tumekuwa chini ya Mather ya Dining Hall hivi karibuni,
itabidi kukumbuka kwamba wao mwingi wa trays kama hii,
sisi alikopa hizi kutoka Annenberg kabla darasani.
Hivyo hii stack ya trays, ingawa, ni mwakilishi kweli
muundo wa data ya sayansi ya kompyuta.
Kuna muundo wa data katika sayansi ya kompyuta
inayojulikana kama stack ambayo vizuri mno imejikita kwenye hasa hii ya kuona.
Hivyo kama kila mmoja trays haya si tray lakini kama idadi na nilitaka
kuhifadhi idadi, mimi inaweza kuweka moja chini hapa,
na mimi naweza kuweka mwingine chini hapa, na kuendelea stacking idadi
juu ya mtu mwingine, na nini uwezekano wa kusaidia kuhusu hili
ni kwamba nini maana ya muundo huu data?
Ambayo idadi naweza kujiondoa kwanza zaidi conveniently?
Hivi karibuni kuweka moja juu ya hapo.
>> Hivyo hii ni nini tunataka kuwaita katika sayansi ya kompyuta LIFO data muundo.
Mwisho katika, nje ya kwanza.
Na tutaweza kuona kabla ya muda mrefu kwa nini ambazo zinaweza kuwa na manufaa lakini kwa sasa,
kufikiria tu mali.
Na ni aina ya kijinga kama unadhani kuhusu jinsi ukumbi dining hufanya.
Kila wakati wao trays safi na kuweka ndio freshest juu,
unaweza kuwa na awali safi lakini hatimaye chafu sana na vumbi
tray chini kabisa kama wewe kamwe kweli
kupata chini ya kwamba stack, kwa sababu wewe tu
kuendelea kuweka mpya na ndio safi juu yake.
Kitu kimoja kinaweza kutokea katika maduka makubwa mno.
Kama una kesi kuonyesha maziwa na kila CVS wakati
au mtu anapata maziwa zaidi, wewe tu mkupuo maziwa ya
tayari una kwa nyuma na kuweka ndio mpya juu mbele,
wewe ni kwenda na baadhi pretty nasty maziwa mwishoni mwa muundo data,
kwa sababu mara nyingi ni chini au equivalently mara nyingi ni nyuma.
>> Lakini kuna njia nyingine ya kufikiri juu ya wamejipanga data na kwa mfano, hii.
Kama wewe ni mmoja wa watu wale ambao anapenda kujipanga nje ya maduka ya Apple
wakati bidhaa mpya anakuja nje, wewe pengine
si kwa kutumia data mkusanyiko muundo kwa sababu wewe
ingekuwa kuwatenganisha mtu mwingine ambaye ni wanaojitokeza kununua baadhi toy mpya.
Badala yake, wewe pengine kutumia ni aina gani ya muundo wa data
au ni aina gani ya mfumo katika ulimwengu wa kweli?
Hopefully ni mstari, au zaidi vizuri au zaidi Uingereza-kama, foleni.
Na zinageuka foleni ni pia data ya muundo katika sayansi ya kompyuta,
lakini foleni ina sana mbalimbali ya mali.
Siyo LIFO.
Mwisho katika, nje ya kwanza.
Hasha.
Ni badala FIFO.
Kwanza katika, nje ya kwanza.
Na kwamba ni jambo jema kwa inadai hivyo haki
hakika wakati wewe ni wamejipanga up super mapema asubuhi.
Kama kupata huko kwanza, wanataka kupata nje ya kwanza pia.
>> Na hivyo wote wa takwimu hizi miundo, foleni na mwingi
na mashada ya wengine, zinageuka wewe Unaweza kufikiri ya hii kama tu safu.
Hii ni safu, labda ukubwa fasta 4, lakini d
kuwa aina ya nzuri kama tunaweza tu rundo trays karibu kubwa mirefu kama sisi
na kwamba trays wengi au namba.
Hivyo labda tunataka kutumia orodha wanaohusishwa hapa,
lakini biashara-off ni kwenda kuwa uwezekano wa kwamba tunahitaji zaidi ya kumbukumbu,
inachukua muda kidogo zaidi, lakini sisi wala kikomo urefu wa stack,
kiasi kama Mather ya kuonyesha kesi inaweza kudhibiti ukubwa wa stack,
na hivyo hawa ni maamuzi kubuni au chaguzi kwa hatima yetu.
Hivyo, pamoja na data hizi miundo, tumekuwa kuanza
kuona mipaka mpya juu ya uwezekano wa juu ya nini hapo awali alikuwa super haraka
na ambapo tutaweza kuondoka mbali leo na ambapo
tutaweza matumaini ya kupata ni siku ya Jumatano, tutaweza
kuanza kuangalia data muundo kwamba unatuwezesha kutafuta
kupitia data katika gogo mwisho wakati tena.
Na tuliona kwamba, kukumbuka, katika wiki sifuri na moja na utafutaji binary au kugawanya
na kushinda.
Ni kuja nyuma na bado bora, grail takatifu kwa Jumatano hii
itakuwa kuja na muundo wa data kwamba anaendesha kweli
au kinadharia katika wakati mara kwa mara, ambapo
haijalishi ni wangapi mamilioni au mabilioni ya mambo
tuna katika muundo data, itakuwa kutupeleka wakati mara kwa mara, labda hatua moja
au hatua mbili au hatua 10, lakini idadi mara kwa mara ya hatua
kutafuta njia kwamba muundo data.
Hiyo kweli itakuwa grail takatifu lakini zaidi juu ya kwamba siku ya Jumatano.
Kuona ya basi.
>> [Music kucheza]