[Daqq tal-mużika]
>> Doug LLOYD: OK so suġġeriment qabel ma tibda hawn.
Jekk int ma jaraw l-video fuq Pointers inti tista 'tixtieq li tagħmel dan ewwel.
Minħabba dan il-video huwa ieħor mod ta 'ħidma ma' indikaturi.
>> Allura li għaddej biex jitkellmu dwar ċerti kunċetti
li aħna tkopri fl- Pointers video, u aħna qed
se tinjora minnhom issa, jekk wieħed jassumi li dawn qed diġà
tip ta 'mifhuma.
Allura dan huwa biss twissija leali tiegħek li jekk int tara dan il-video
u inti ma bbenefikawx l- pointers video, jista tip ta '
fly fuq kap tiegħek ftit.
U għalhekk jista 'jkun aħjar sabiex isegwu din f'dik l-ordni.
>> Allura aħna diġà raw wieħed mod biex jaħdmu ma pointers,
li hija aħna tiddikjara varjabbli, u allura aħna
tiddikjara varjabbli ieħor, pointer varjabbli, li l-punti lilha.
Allura konna ħoloq varjabbli ma 'isem, konna
ħolqot it-tieni varjabbli ma 'isem, u aħna punt li t-tieni varjabbli
f'dak ewwel.
Din it-tip ta jkollha problema għalkemm, minħabba li
twassalna sabiex tkun taf eżattament kemm memorja kemm aħna qed
ser jeħtieġu l-mument programm tagħna hija miġbura.
>> Għaliex huwa li?
Għaliex aħna jeħtieġu li jkunu kapaċi biex insemmu jew jidentifikaw il-varjabbli kollha possibbli
nistgħu jiltaqgħu.
Aħna jista 'jkollhom firxa li jista' jkun kapaċi li jkollhom ħafna ta 'informazzjoni,
iżda huwa għadu ma eżattament preċiżi biżżejjed.
X'jiġri jekk ma nafux, dak jekk aħna għandna ebda idea
kemm aħna bzonn fil-ħin jikkompilaw?
Jew dak jekk programm tagħna se run għal żmien twil verament,
taċċetta utent varji data, u ma nistgħux verament
jistma jekk aħna qed ser jeħtieġu 1,000 unità?
>> Mhuwiex simili nistgħu jgħidu fil-linja tal-kmand
jidħol kemm oġġetti taħseb li għandek bzonn.
Ukoll jekk dak li raden huwa ħażin?
Allokazzjoni memorja dinamika tip ta 'jippermetti t-triq
biex tikseb madwar din il-problema partikolari.
U l-mod tagħmlu huwa bl-użu pointers.
>> Nistgħu nużaw indikaturi għall jiksbu aċċess għal dinamikament
memorja allokati, memorja li hija allokati kif program tiegħek tkun qed taħdem.
Mhuwiex allokat fil-ħin jikkompilaw.
Meta inti dinamikament talloka memorja niġu minn grupp
tal-memorja magħrufa bħala l-borġ.
Preċedentement il-memorja konna ilha taħdem magħhom fil-kors
ġie ġejjin minn grupp tal-memorja magħrufa bħala l-munzell.
Mod tajjeb biex ġeneralment iżomm mind-- u din ir-regola
mhux dejjem iżżomm veru, iżda pjuttost ħafna kważi
dejjem istivi true-- huwa li kull darba li inti tagħti isem varjabbli it
probabbilment ħajjiet fuq il-munzell.
U kull darba li inti ma jagħtu varjabbli isem,
li inti tista 'tagħmel bil-memorja dinamika allokazzjoni, jgħix fuq il-borġ.
>> Issa jien tip ta 'preżentazzjoni ta' din kif jekk hemm dawn iż-żewġ ġabriet ta 'memorja.
Iżda int tista raw dan dijagramma, li hija ġeneralment
rappreżentazzjoni ta ' dak memorja Dehra,
u aħna mhux qed tmur għall-kura dwar l l-għalf fil-quċċata u l-qiegħ.
What we care about hija din il-parti fil nofs hawn, borġ u munzell.
Kif tistgħu taraw mill tħares lejn dan dijagramma,
dawn fil-fatt huma mhux tnejn pools separati ta 'memorja.
Huwa wieħed ġabra kondiviża ta 'memorja fejn tibda, f'dan viżwali
tibda fil-qiegħ u jibdew mili
mill-qiegħ bil-munzell, u inti tibda fil-quċċata u l-bidu mili
mill-top down bl-borġ.
Imma dan huwa verament l- istess pool, huwa biss
spots differenti, f'postijiet differenti fil-memorja li qed jiġu allokati.
U inti tista 'taħdem barra mill- memorja billi jew li
-borġ jmorru it-triq kollha mal-qiegħ, jew ikollhom
il-munzell tmur it-triq lejn il-wiċċ, jew li l-munzell u l munzell
jiltaqgħu kontra xulxin.
Kollha ta 'dawn jistgħu jkunu kundizzjonijiet li jikkawżaw program tiegħek
li jispiċċaw ta 'memorja.
Sabiex iżommu dan f'moħħhom.
Meta nitkellmu dwar -borġ u l munzell
aħna qed verament jitkellem dwar il- istess blokki ġenerali tal-memorja, just
porzjonijiet differenti ta 'dak memorja.
>> Allura kif nistgħu tikseb dinamiku allokati memorja fl-ewwel post?
Kif programm tagħna jiksbu memorja kif huwa taħdem?
Well C jipprovdi funzjoni msejħa malloc, allokatur memorja, li
inti tagħmel sejħa biex, u inti tgħaddi fil kif bytes ta 'memorja li inti tixtieq ħafna.
Mela jekk program tiegħek tkun qed taħdem u inti tixtieq runtime numru sħiħ,
inti tista mallock erba 'bytes ta' memorja, malloc parentesi erbgħa.
>> mallock se jgħaddu tfittex permezz-borġ,
għaliex aħna qed dinamiku allokazzjoni memorja,
u se terġa 'lura lilek a pointer għal dak memorja.
Ma jtik li memory-- ma tagħtiha isem,
tagħtik pointer lilha.
U hekk hu għalhekk darb'oħra I said li huwa importanti li forsi
jkollhom jaraw il-video pointers qabel nikbru wisq fis dan.
Allura malloc għaddej biex jagħtuk lura pointer.
>> Jekk mallock ma jista 'jagħtik xi memorja għaliex inti ħadthom jispiċċaw,
dan ser jagħtuk lura pointer null.
Do you remember dak li jiġri jekk aħna ipprova u dereference pointer null?
Aħna jbatu tort seg, right?
Li probabbilment mhux tajba.
>> Allura kull darba li inti tagħmel sejħa li malloc inti dejjem, dejjem
bżonn li jiċċekkja jekk il- pointer huwa ħadt lura huwa null.
Jekk huwa, inti għandek bżonn biex tintemm program tiegħek għaliex jekk inti tipprova u dereference
il pointer null int ser li jbatu tort segmentazzjoni
u l-programm tiegħek huwa ser crash xorta waħda.
Allura kif nistgħu statikament jiksbu integer?
>> int x.
Imxejna probabbilment għamlu dan mazz ta 'drabi, id-dritt?
Dan joħloq varjabbli imsejjaħ x li jgħix fuq il-munzell.
Kif nistgħu dinamikament jiksbu integer?
Int px star ugwali malloc 4.
>> Jew b'mod aktar xieraq aħna'd ngħidu px star int
ugwali daqs malloc ta 'int, biss biex titfa 'inqas
numri magic madwar programm tagħna.
Dan se jinkiseb għalina erba 'bytes ta' memorja mill-borġ,
u l-pointer nikbru lura għall huwa msejjaħ px.
U mbagħad biss kif konna isir qabel we
jista dereference px li aċċess li l-memorja.
Kif nikbru integer mill-utent?
Nistgħu ngħidu int x ugwali tikseb int.
Li pjuttost sempliċi.
X'jiġri jekk irridu noħolqu firxa ta 'x sufruni li jgħixu fuq il-munzell?
float stack_array-- dak l-isem tal array-- tagħna parentesi kwadri x.
Li se toħloq għalina firxa ta 'x sufruni li jgħixu fuq il-munzell.
Nistgħu noħolqu firxa ta 'sufruni li jgħix fuq l-borġ, wisq.
Is-sintassi tista 'tidher a ftit aktar diffiċli,
iżda nistgħu ngħidu float heap_array star ugwali
malloc x darbiet id-daqs tal-float.
I bżonn spazju biżżejjed biex iżomm x f'wiċċ l-ilma valuri tal-punti.
Allura ngħid I bżonn 100 sufruni, jew 1,000 floats.
Allura f'dak il-każ ikun 400 bytes għal 100 sufruni,
jew 4,000 bytes għal 1,000 sufruni, għax kull float jieħu
erba 'bytes ta' spazju.
>> Wara li tagħmel dan nista 'nuża l- sintassi bracket kwadru fuq heap_array.
Just kif nixtieq fuq stack_array, I tista 'aċċess elementi tagħha individwalment
użu heap_array żero, wieħed heap_array.
Iżda tfakkar r-raġuni nistgħu nagħmlu dan huwa minħabba l-isem ta 'firxa fis-C
huwa verament pointer li ewwel element li firxa ta.
Allura l-fatt li aħna qed tkun iddikjarat li firxa ta 'sufruni fuq il-munzell hawn
huwa attwalment daqsxejn qarrieqa.
Aħna verament huma fil- tieni linja tal-kodiċi hemmhekk
ħolqien wkoll pointer għal blokki ta ' memorja li aħna mbagħad jagħmlu xi xogħol magħhom.
>> Hawn il-problema kbira ma dinamikament allokati memorja għalkemm,
u dan huwa għaliex huwa verament importanti li jiġu żviluppati xi drawwiet tajba
meta inti qed jaħdmu magħha.
B'differenza statikament iddikjarat memorja, memorja tiegħek
mhux awtomatikament lura lill- sistema meta funzjoni tiegħek isir.
Mela jekk ikollna prinċipali, u prinċipali jitlob funzjoni
f, meta f finituri dak kollu li qed jagħmel u prospetti kontroll tal-programm
lura għall ewlenija, kollha tal-memorja li f użati jingħata lura.
Huwa jista 'jerġa' jintuża minn xi programm ieħor,
jew xi funzjoni oħra li gets imsejħa aktar tard fil prinċipali.
Hija tista 'tuża l-istess memorja aktar mill-ġdid.
>> Jekk inti dinamikament jallokaw memorja għalkemm
inti għandek tgħid b'mod espliċitu l- sistema li qed isir magħha.
Hija ser żżomm fuq dan għalik, li jistgħu jwassal għal problema ta 'inti taħdem barra
tal-memorja.
U fil-fatt aħna kultant jirreferu għal dan bħala nixxija memorja.
U xi kultant dawn tnixxijiet memorja jista 'attwalment jiġi verament devastanti
għall-prestazzjoni tas-sistema.
>> Jekk int utent internet frekwenti inti tista 'tuża ċerti web browsers,
u jien mhux se isem ismijiet hawn, iżda hemm xi browsers web hemmhekk
li huma notorji għal fatt li tnixxijiet memorja li ma jsibux fissi.
U jekk inti tħalli browser tiegħek miftuħa għal perjodu twil ħafna ta 'żmien, ġranet
u ġranet, jew ġimgħat, inti xi kultant tista 'tinnota li s-sistema tiegħek
huwa running tassew, tassew bil-mod.
U r-raġuni għal dan hija li l-browser allokat memorja,
iżda mbagħad ma qal is-sistema li huwa jsir minnu.
U hekk li l-weraq memorja inqas disponibbli għal kulħadd ta 'programmi oħra tiegħek
li jkollhom jaqsmu, għax int leaking-- li web browser
programm qed tqattar memorja.
Kif nistgħu jagħtuk memorja lura meta aħna qed isir magħha?
Ukoll fortunatament huwa Mod faċli ħafna biex jagħmlu dan.
Aħna biss ħielsa it.
Hemm funzjoni msejħa ħielsa, hija taċċetta pointer għall-memorja,
u aħna qed imorru tajjeb.
>> Mela ejja ngħidu aħna qed fil- nofs tal-programm tagħna,
irridu li malloc 50 karattru.
Aħna rridu li malloc firxa li jistgħu kapaċi jżomm 50 karattru.
U meta aħna jiksbu pointer lura għall li, isem li pointer huwa kelma.
We do dak kollu aħna qed se jagħmlu ma 'kelma,
u mbagħad meta nkunu isir aħna biss ħielsa it.
U issa għandna lura dawk 50 bytes ta 'memorja lura għas-sistema.
Xi funzjoni oħra jistgħu jużawhom.
Aħna ma jkollhom għalfejn tinkwieta dwar ssofri nixxija memorja għaliex għandna meħlusa kelma.
Imxejna minħabba l-memorja lura, hekk aħna qed isir jaħdmu magħha.
Allura hemm tliet regoli tad-deheb li għandhom
jinżamm fil-moħħ meta int dinamikament allokazzjoni memorja
ma malloc.
Kull blokk ta 'memorja li inti malloc għandhom ikunu meħlusa
qabel program tiegħek finituri running.
Issa mill-ġdid, fil-appliance jew fil- IDE dan it-tip ta 'jiġri għalik xorta
meta you-- dan se jiġri xorta waħda meta programm tiegħek jiġi tterminat,
l-memorja se jiġu rilaxxati.
Imma hija kodifikazzjoni ġeneralment tajba prattika li dejjem, meta qed isir,
ħielsa dak li għandek mallocd.
>> Cela dit, uniċi affarijiet li inti stajt mallocd għandhom jinħelsu.
Jekk inti statikament jiddikjaraw numru sħiħ, int x semi-colon,
li jgħix fuq l-munzell, inti ma allura jridux ħielsa x.
Allura uniċi affarijiet li inti stajt mallocd għandhom jinħelsu.
>> U fl-aħħarnett, ma xi ħaġa b'xejn darbtejn.
Li jistgħu jwasslu għal sitwazzjoni stramb ieħor.
Allura dak kollu li inti stajt mallocd għandha jinħelsu.
Affarijiet biss li inti stajt malloc għandhom jinħelsu.
U ma xi ħaġa b'xejn darbtejn.
>> Mela ejja jmorru permezz ta 'eżempju hawn ta 'dak li xi dinamiku allokat
memorja jista 'dehra mħallta ma xi memorja statika.
X'jista 'jiġri hawn?
Ara jekk inti tista 'ssegwi flimkien u raden x'hemm
se jiġri bħala immorru permezz ta 'dawn il-linji kollha ta' kodiċi.
>> Allura aħna ngħidu int m.
X'jiġri hawn?
Ukoll dan huwa pjuttost sempliċi.
I joħolqu varjabbli numru sħiħ imsejħa m.
I kulur it aħdar, għaliex dak l-kulur
li nuża meta jien jitkellem dwar varjabbli numru sħiħ.
Huwa kaxxa.
Huwa sejjaħ m, u inti tista ' interi maħżen ġewwa ta 'dan.
>> X'jiġri jekk I imbagħad ngħid star int a?
Ukoll li pjuttost simili.
Jien ħolqien kaxxa msejħa a.
Huwa kapaċi li int azjenda stilla, pointers għal interi.
Hekk jien kulur it aħdar ish ukoll.
>> Naf li xi ħaġa li tagħmel ma 'numru sħiħ,
iżda mhux nnifisha numru sħiħ.
Imma hija pjuttost l-istess idea.
Stajt ħolqot kaxxa.
Kemm minn dawn id-dritt issa jgħixu fuq il-munzell.
Stajt tawhom kemm l-ismijiet.
>> star int b ugwali daqs malloc ta 'int.
Dan wieħed jista 'jkun ftit delikata.
Tieħu t-tieni u jaħsbu dwar dak li tistenna li jiġri fuq dan dijagramma.
star int b ugwali daqs malloc ta 'int.
>> Ukoll dan ma biss toħloq kaxxa waħda.
Dan fil-fatt joħloq żewġ kaxxi.
U hija torbot, huwa jistabbilixxi wkoll punt fl-relazzjoni.
Imxejna allokat blokka waħda tal-memorja fuq il-borġ.
Avviż li l-kaxxa lemin ta 'fuq hemm ma jkollux isem.
>> Aħna mallocd dan.
Hija teżisti fis-borġ.
Iżda b għandha isem.
Huwa varjabbli pointer imsejjaħ b.
Li jgħix fuq il-munzell.
>> Allura huwa biċċa ta 'memorja li l-punti ma 'xulxin.
b fih l-indirizz ta 'dik blokk ta' memorja.
Huwa ma jkollu l-isem mod ieħor.
Iżda dan jindika lilha.
Allura meta ngħidu star int b ugwali daqs malloc ta 'int, li hemm dritt,
li vleġġa li feġġ fuq l- lemin hemm, li ħaġa sħiħa,
I ser ikollhom jidher għal darb'oħra, huwa dak li jiġri.
Kollha ta 'li jiġri fil li linja waħda tal-kodiċi.
Issa aħna ser tingħata ftit aktar sempliċi mill-ġdid.
a ugwali ampersand m.
Tiftakar dak ugwali ampersand m hu?
Ukoll li l-gets indirizz m ta.
Jew imqiegħda aktar permezz tad-dijagramma, punti li m.
>> a ugwali b.
OK hekk hawn xulxin.
A ugwali b.
X'hemm jiġri għall-dijagramma dan iż-żmien?
>> Ukoll ifakkar li l- xogħlijiet operatur assenjazzjoni
billi jassenja l-valur fis- dritt għall-valur fuq ix-xellug.
Allura minflok ta 'tipponta lejn m, a issa jindika l-istess post li l-punti b.
a ma jwassalx biex b, a jinnota punti fejn b.
>> Jekk osservat li b li kienu ugwali ampersand b.
Iżda minflok ugwali b biss ifisser li aub huma issa
tipponta lejn l-istess indirizz, minħabba ġewwa tal b huwa biss l-indirizz.
U issa ġewwa ta 'l-istess indirizz.
m ugwali għal 10, probabbilment l- aktar ħaġa sempliċi
aħna ghamilt fil ftit.
Poġġi l-10 fil-kaxxa.
Star b ugwali m flimkien ma '2, jitlob lura mingħandhom pointers vidjo tagħna dak star b jfisser.
Aħna qed tmur biex dereference bu mressqa xi valur f'dak il-lok memorja.
F'dan il-każ 12.
>> Allura meta aħna dereference punt ta ' ifakkar aħna biss ivvjaġġar l-vleġġa.
Jew fi kliem ieħor, aħna tmur f'dak indirizz memorja
u aħna jimmanipulaw dan b'xi mod.
Npoġġux xi valur fil hemmhekk.
F'dan il-każ star b ugwali m plus 2 huwa biss
mur l-varjabbli indikat mill b, mur l-memorja indikat mill b,
u mqiegħda m plus 2 fil hemm, 12.
>> Issa I mingħajr b.
X'jiġri meta I mingħajr b?
Ftakar dak li għidt mezzi ħielsa.
What am I qal meta I mingħajr b?
>> Jien jsir taħdem ma 'dan, id-dritt?
I essenzjalment tagħti l-memorja.
I jagħtu lura għas-sistema.
I m'għandhomx bżonn dan aktar huwa dak li jien tgħidilhom, OK?
>> Issa jekk ngħid star a huwa daqs 11 inti tista 'probabbilment
diġà tgħid li xi ħaġa ħażina jiġri hawn, id-dritt?
U fil-fatt jekk I ppruvaw li I probabbilment jsofrux tort segmentazzjoni.
Għaliex issa, għalkemm qabel dik blokki ta 'memorja
kienet xi ħaġa li kelli aċċess għal, f'dan il-punt
jien issa jaċċessaw memorja li mhuwiex legali biex nagħmel l-aċċess.
>> U kif aħna se probabbilment ifakkar, meta aħna jkollhom aċċess memorja
li aħna mhux qed suppost għal mess, dak l-aktar kawża komuni
ta 'segmentazzjoni tort. U hekk program tiegħi
kieku crash jekk I ppruvaw jagħmlu dan.
Għalhekk għal darb'oħra din hija idea tajba li tikseb tajba prattika u tajba drawwiet sodi
meta jaħdmu ma malloc u ħielsa, sabiex inti ma jbatux segmentazzjoni
ħsarat, u li tuża dinamikament allokat tiegħek
memorja responsabbli.
>> Jien Doug Lloyd dan huwa CS50.