[MIZIK jwe]
>> Doug Lloyd: OK konsa yon sijesyon anvan yo kòmanse isit la.
Si ou pa gen gade videyo a sou endikasyon ou ta ka vle fè sa an premye.
Paske videyo sa a se yon lòt fason pou travay ak endikasyon.
>> Se konsa, li k ap pase yo pale sou kèk konsèp
ke nou kouvri nan la endikasyon videyo, ak nou ap
ale nan enteprete sou yo kounye a, an konsideran ke yo ap deja
sòt de konprann.
Se konsa, sa se sèlman avètisman ki jis ou ke si ou ap wè videyo sa a
epi ou pa gen pou wè nan endikasyon videyo, li ta ka sòt de
vole sou tèt ou yon ti kras.
Se konsa, li ta ka pi bon yo gade l 'nan ki lòd.
>> Se konsa, nou te deja wè yon sèl fason yo travay avèk endikasyon,
ki se nou deklare yon varyab, ak lè sa a nou
deklare yon lòt varyab, yon konsèy varyab, ki pwen nan li.
Se konsa, nou te kreye yon varyab ak yon non, nou te
kreye yon varyab dezyèm ak yon non, epi nou pwen ke dezyèm varyab
lè sa an premye.
Sa a sòt de te gen yon pwoblèm menm si, paske li
mande pou nou konnen egzakteman konbyen lajan memwa nou ap
ale nan bezwen moman sa a Pwogram nou an konpile.
>> Poukisa se sa?
Paske nou bezwen pou kapab non oswa idantifye tout nan varyab yo posib
nou ta ka rankontre.
Nou ta ka gen yon etalaj ke sa ta kapab kapab kenbe yon anpil nan enfòmasyon,
men li la toujou pa egzakteman egzak ase.
E si nou pa konnen, sa ki si nou pa gen okenn lide
konbyen lajan nou pral bezwen nan konpile tan?
Ou sa ki si pwogram nou an pral kouri pou yon moman vrèman long,
aksepte divès kalite itilizatè done, epi nou pa kapab reyèlman
estime si wi ou non nou ap ale nan bezwen 1,000 inite?
>> Li pa tankou nou kapab di nan liy la bay lòd
antre nan konbyen atik ou panse ou pral bezwen.
Oke, sa ki si ke devine ki mal?
Alokasyon memwa dinamik sòt de pèmèt nou wout la
jwenn alantou pwoblèm sa a an patikilye.
Apre sa, wout la li fè li se lè l sèvi avèk endikasyon.
>> Nou ka sèvi ak endikasyon jwenn aksè nan dynamique
resevwa lajan memwa, memwa se sa ki resevwa lajan kòm pwogram ou an ap kouri.
Li pa nan resevwa lajan nan konpile tan.
Lè ou dynamique asiyen memwa li soti nan yon pisin
nan memwa ke yo rekonèt kòm pil wòch la.
Précédemment tout memwa a nou te te travay ak nan kou a
ki te vini soti nan yon pisin nan memwa li te ye tankou chemine a.
Yon bon fason yo jeneralman kenbe nan ak sa a règ mind--
pa toujou kenbe vre, men bèl anpil prèske
toujou kenbe true-- se ke nenpòt fwa ou bay yon non varyab li
pwobableman ap viv sou pil la.
Apre sa, nenpòt ki lè ou pa fè sa bay yon varyab yon non,
ki ou ka fè ak dinamik memwa alokasyon, li ap viv sou pil wòch la.
>> Koulye a, mwen kalite prezante sa a kòm si gen nan de pisin sa yo nan memwa.
Men, ou ka te wè sa a dyagram, ki se jeneralman
yon reprezantasyon nan sa memwa sanble,
epi nou pa ap ale nan pran swen sou tout bagay la nan tèt la ak anba a.
Ki sa nou pran swen sou se yon pati sa a nan mitan an isit la, pil wòch ak chemine.
Kòm ou ka wè pa gade nan dyagram sa a,
sa yo aktyèlman yo pa de pisin separe nan memwa.
Se youn pisin Pataje nan memwa kote ou kòmanse, nan ka sa vizyèl
ou kòmanse nan pati anba a epi yo kòmanse ranpli moute
anba nan fon an ak chemine a, epi ou kòmanse nan tèt la epi yo kòmanse ranpli moute
soti nan tèt la desann ak pil wòch la.
Men, li vrèman se nan menm pisin, li nan jis
tach diferan, diferan pozisyon nan memwa sa ki te resevwa lajan.
Epi ou ka kouri soti nan memwa pa swa gen
pil wòch la ale tout wout la nan pati anba a, oswa ki gen
chemine a ale tout wout la nan tèt la, oswa gen pil wòch la ak chemine a
satisfè moute kont youn ak lòt.
Tout nan tout sa yo kapab kondisyon ki lakòz pwogram ou
kouri soti nan memwa.
Se konsa, kenbe sa nan tèt ou.
Lè nou pale sou pil wòch la ak chemine a
nou ap reyèlman ap pale de la menm moso jeneral nan memwa, jis
pòsyon diferan nan ki memwa.
>> Se konsa, kouman nou jwenn dynamique resevwa lajan memwa nan plas an premye?
Ki jan nou jwenn pwogram memwa kòm li nan kouri?
Oke C bay yon fonksyon rele malok, allocator memwa, ki
ou fè yon rele nan, epi ou pase nan konbyen bytes nan memwa ke ou vle.
Se konsa, si pwogram ou an ap kouri epi ou vle yon ègzekutabl nonb antye relatif,
ou ta ka mallock kat bytes nan memwa, malok parantèz kat.
>> mallock pral ale nan kap nan pil wòch la,
paske nou ap dynamique allocation memwa,
epi li pral tounen vin jwenn nou yon konsèy ak sa yo ki memwa.
Li pa ba ou ki memory-- li pa bay li yon non,
li ba ou yon konsèy nan li.
Se konsa, sa a, se poutèt sa mwen te di ankò ki li enpòtan yo petèt
te ap gade videyo a endikasyon anvan nou jwenn twò lwen nan sa a.
Se konsa, malok k ap pase yo ba ou tounen yon konsèy.
>> Si mallock pa ka ba ou nenpòt memwa paske ou te kouri soti,
li pral ba ou tounen yon konsèy nil.
Ou sonje sa k ap pase si nou eseye ak dèreferans yon konsèy nil?
Nou soufri yon fay seg, dwa?
Sa a pwobableman pa bon.
>> Se konsa, chak fwa ou fè yon apèl toujou malok ou, toujou
bezwen yo tcheke si wi ou non nan konsèy li te ban nou tounen se nil.
Si li se, ou bezwen fini pwogram ou paske si ou eseye epi dèreferans
konsèy la nil w ap ale yo soufri yon fay segmentation
ak pwogram ou a se ale nan aksidan de tout fason.
Se konsa, kouman fè nou statics jwenn yon nonb antye relatif?
>> int x.
Nou te pwobableman fè sa yon pakèt moun sou fwa, dwa?
Sa vin kreye yon varyab rele x ki viv sou pil la.
Ki jan nou jwenn yon nonb antye relatif dynamique?
Int PX zetwal egal malok 4.
>> Oswa plis yon fason ki apwopriye nou ta di zetwal int PX
egal gwosè malok nan int, jis voye jete kèk mwens
nimewo majik alantou pwogram nou an.
Sa a se pral jwenn pou nou kat bytes nan memwa soti nan pil wòch la,
ak konsèy la nou jwenn tounen nan yo rele sa PX.
Lè sa a, menm jan nou te fè deja nou
kapab dèreferans PX aksè ki memwa.
Ki jan nou jwenn yon nonb antye relatif soti nan itilizatè a?
Nou ka di Int x egal jwenn Int.
Sa a trè senp.
E si nou vle kreye yon etalaj a x flote ki ap viv sou chemine a?
flote stack_array-- sa a, se non an a array-- nou an parantèz kare x.
Ki pral kreye pou nou yon etalaj a x flote ki ap viv sou pil la.
Nou ka kreye yon etalaj ki te gen cha ki ap viv sou pil wòch la, tou.
Sentaks la ta ka gade yon ti kras pi plis ankonbran,
men nou ka di flote zetwal heap_array egal
malok x fwa gwosè a nan flote a.
Mwen bezwen ase espas yo kenbe x valè pwen k ap flote.
Se konsa, di mwen bezwen 100 flote, oswa 1,000 cha.
Se konsa, nan ka sa a li ta 400 bytes pou 100 flote,
oswa 4,000 bytes pou 1,000 flote, paske chak flote pran moute
kat bytes nan espas.
>> Apre fè sa mwen ka itilize nan kare sentaks bracket sou heap_array.
Menm jan mwen ta sou stack_array, mwen kapab jwenn aksè eleman li yo endividyèlman
lè l sèvi avèk heap_array zewo, youn heap_array.
Men, sonje rezon ki fè yo nou ka fè sa se paske non an nan yon etalaj nan C
se reyèlman yon konsèy nan premye eleman ki etalaj la.
Se konsa, lefèt ke nou ap deklare yon etalaj ki te gen cha sou chemine a isit la
se aktyèlman yon ti jan ki twonpe.
Nou vrèman se nan la dezyèm liy nan Kòd gen
tou kreye yon konsèy nan yon ti moso nan memwa ke nou Lè sa a, fè kèk travay avèk yo.
>> Isit la nan gwo pwoblèm nan ak dynamique resevwa lajan memwa menm si,
e sa se poukisa li vrèman enpòtan yo devlope kèk bon abitid
lè w ap travay ak li.
Kontrèman ak statics deklare memwa, memwa ou
se pa sa otomatikman retounen nan nan sistèm lè se fonksyon ou fè.
Se konsa, si nou gen prensipal yo, ak prensipal rele yon fonksyon
f, lè f Otermin tou sa li ap fè epi retounen kontwòl nan pwogram nan
tounen nan prensipal yo, tout nan memwa a se ke f itilize bay tounen.
Li kapab itilize ankò pa kèk lòt pwogram,
oswa kèk lòt fonksyon ki vin rele pita sou nan prensipal la.
Li ka sèvi ak sa memwa menm sou ankò.
>> Si ou dynamique asiyen memwa menm si
ou gen yo di nan klèman sistèm ki w ap fè ak li.
Li pral kenbe li pou ou, ki te kapab mennen nan yon pwoblèm nan nou kouri soti
nan memwa.
Lè an reyalite nou pafwa, al gade nan sa a kòm yon fwit memwa.
Epi pafwa fwit memwa sa yo ka aktyèlman dwe reyèlman devastatè
pou pèfòmans sistèm.
>> Si ou se yon itilizatè entènèt souvan ou ta ka sèvi ak sèten navigatè entènèt,
epi mwen pa pral non non isit la, men gen kèk navigatè entènèt yo deyò
ki repite pou aktyèlman gen fwit memwa ki pa jwenn fiks yo.
Men, si ou kite navigatè ou a louvri pou yon peryòd trè long nan tan, jou
ak jou, oswa semèn, ou pafwa ta ka remake ke sistèm ou
se kouri reyèlman, reyèlman tou dousman.
Ak rezon an pou sa a se ke te navigatè a resevwa lajan memwa,
men Lè sa a pa te di sistèm nan ke li nan fè ak li.
Se konsa, ki kite mwens memwa disponib pou tout moun nan lòt pwogram ou
gen yo pataje, paske ou se leaking-- ki navigatè entènèt
pwogram se koule memwa.
Ki jan nou bay memwa tounen lè nou ap fè ak li?
Oke erezman li nan yon trè fasil fason yo fè li.
Nou jis libere li.
Genyen yon fonksyon rele gratis, li aksepte yon konsèy nan memwa,
epi nou ap bon yo ale.
>> Se konsa nou di nou ap nan la presegondè nan pwogram nou an,
nou vle malok 50 karaktè.
Nou vle malok yon etalaj ki ka ki kapab kenbe 50 karaktè.
Lè nou jwenn yon konsèy tounen nan sa, non ki konsèy la se mo.
Nou fè tou sa nou ap pral fè ak pawòl Bondye,
ak Lè sa a lè nou ap fè nou jis libere li.
Epi, koulye a nou te retounen moun 50 bytes nan memwa tounen nan sistèm nan.
Gen kèk lòt fonksyon ka sèvi ak yo.
Nou pa gen enkyete sou soufri yon fwit memwa paske nou te libere mo.
Nou te bay memwa a tounen, se konsa nou ap fè travay ak li.
Se konsa, gen twa règ lò ki ta dwe
dwe kenbe nan tèt ou nenpòt lè w ap dynamique allocation memwa
ak malok.
Chak blòk nan memwa ki ou malok yo dwe libere
anvan pwogram ou fini kouri.
Koulye a, ankò, nan aparèy la oswa nan la IDE sa a sòt de k ap pase pou ou de tout fason
lè you-- sa a pral rive de tout fason lè se pwogram ou an sispann,
pral tout memwa a pral lage.
Men, li la jeneralman bon kodaj pratik toujou, lè w ap fè,
libere sa ou te mallocd.
>> Sa te di, se sèlman bagay sa yo ke ou te mallocd ta dwe libere.
Si ou statics deklare yon nonb antye relatif, int x semi-kolon,
ki ap viv sou chemine a, ou Lè sa a, pa vle libere x.
Se konsa, bagay sa yo sèlman ki ou te mallocd ta dwe libere.
>> Epi anfen, pa fè sa gratis yon bagay de fwa.
Sa ka mennen a yon lòt sitiyasyon etranj.
Se konsa, tout bagay ki ou te mallocd gen yo dwe libere.
Se sèlman bagay sa yo ke ou te ta dwe malok dwe libere.
Apre sa, pa fè sa gratis yon bagay de fwa.
>> Se konsa nou ale nan yon egzanp isit la nan sa ki kèk dynamique resevwa lajan
memwa ta ka sanble melanje nan ak kèk memwa estatik.
Sa ki ka rive isit la?
Gade wè si ou kapab swiv ansanm ak devine sa ki nan
pral rive jan nou ale nan tout sa yo liy nan kòd.
>> Se konsa, nou di Int m.
Kisa k ap pase isit la?
Oke sa a se trè senp.
Mwen kreye yon varyab nonb antye relatif yo rele m.
Mwen koulè li vèt, paske se sa koulè a
ke mwen itilize lè m 'ap pale sou nonb antye relatif varyab.
Li se yon bwat.
Yo rele li m, epi ou ka nonm antye relatif magazen andedan nan li.
>> E si mwen Lè sa a, di zetwal int yon?
Oke sa a, se bèl menm jan an.
M 'ap kreye yon bwat rele yon.
Li nan ki kapab kenbe int zetwal, endikasyon nonm antye relatif.
Se konsa, mwen koloran li vèt-ich kòm byen.
>> Mwen konnen li gen yon bagay fè ak yon nonb antye relatif,
men li la pa tèt li yon nonb antye relatif.
Men, li la bèl anpil lide nan menm.
Mwen te kreye yon bwat.
Tou de sa yo dwa kounye a ap viv sou pil la.
Mwen te ba yo tou de non.
>> zetwal int b egal gwosè malok nan int.
Yon sèl sa a ta kapab yon ti kras difisil.
Pran yon dezyèm ak reflechi sou sa ou ta atann rive sou dyagram sa a.
zetwal int b egal gwosè malok nan int.
>> Oke sa a pa sèlman kreye yon sèl bwat.
Sa a aktyèlman kreye de bwat.
Epi, se mare, li tou etabli yon pwen nan yon relasyon.
Nou te resevwa lajan yon blòk nan memwa sou pil wòch la.
Remake ti bwat la tèt dwat gen pa gen yon non.
>> Nou mallocd li.
Li egziste sou pil wòch la.
Men, b gen yon non.
Li se yon varyab konsèy rele b.
Ki viv sou pil la.
>> Se konsa, li yon moso nan memwa ki pwen nan yon lòt yon sèl.
b gen adrès la nan ki blòk nan memwa.
Li pa gen yon non otreman.
Men, li lonje dwèt nan li.
Se konsa, lè nou di zetwal int b egal gwosè malok nan int, ki dwat la,
ki flèch ki déja moute sou mòn lan dwat bò la, ke tout bagay,
Mwen pral gen li parèt ankò, se sa ki rive.
Tout moun nan ki k ap pase nan ki sèl liy nan kòd.
Koulye a, nou pral jwenn ti kras pi plis senp ankò.
yon egal comercial m.
Ou sonje ki sa yon egal comercial m se?
Oke sa a, se yon vin adrès m nan.
Ou mete plis Schematics, yon pwen nan m.
>> yon egal b.
OK konsa isit la nan yon lòt yon sèl.
Yon egal b.
Ki sa ki nan pral rive dyagram nan tan sa a?
>> Oke sonje ki nan operatè plasman travay
pa plase valè a sou mòn lan dwat nan valè a sou bò gòch la.
Se konsa, olye pou yo yon pwente m, yon kounye a pwen nan plas la menm ki pwen b.
yon pa lonje dwèt sou b, se yon pwen pwen kote b.
>> Si yon pwente nan b ki ta yo te yon egal comercial b.
Men, olye pou yon egal b jis vle di ke ak b yo kounye a se
montre nan adrès la menm, paske andedan nan b se jis yon adrès.
Epi, koulye a andedan nan yon se adrès la menm.
m egal 10, pwobableman nan pi senp bagay
nou te fè l 'nan yon ti kras.
Mete 10 an nan bwat la.
Star b egal m plis 2, sonje soti nan endikasyon videyo nou an ki sa zetwal b vle di.
Nou pral dèreferans b, li mete kèk valè nan ki kote memwa.
Nan ka sa a 12.
>> Se konsa, lè nou dèreferans yon pwen nan sonje nou jis vwayaje desann flèch la.
Oubyen yo mete li yon lòt fason, nou ale nan ki adrès memwa
epi nou manipile l 'nan kèk fason.
Nou mete kèk valè nan la.
Nan ka sa a zetwal b egal m plis 2 se jis
ale nan varyab la pwente nan pa b, ale nan memwa a pwente nan pa b,
, li mete m plis 2 nan la, 12.
>> Koulye a, mwen libere b.
Kisa k ap pase lè m 'libere b?
Sonje sa m 'te di vle di gratis.
Kisa mwen di lè m 'libere b?
>> M 'ap fè travay ak li, dwa?
Mwen esansyèlman bay moute memwa a.
Mwen bay l 'tounen nan sistèm nan.
Mwen pa bezwen sa a ankò se sa m ap di yo, OK?
>> Koulye a, si mwen di zetwal yon egal 11 ou ka pwobableman
deja di ke yon move bagay ki pral rive isit la, dwa?
Ak tout bon si mwen te eseye ke mwen pwobableman t 'vle kite yon fay segmentation.
Paske kounye a, byenke deja ki ti moso nan memwa
te yon bagay ke mwen te gen aksè nan, nan pwen sa a
koulye a, mwen ap gen aksè nan memwa ki se pa legal pou m 'jwenn aksè nan.
>> E kòm nou pral pwobableman sonje, lè nou jwenn aksè nan memwa
ke nou pa ap sipoze manyen, sa a, se kòz ki pi komen
nan yon segmentation fòt. Se konsa, pwogram mwen
ta aksidan si mwen te eseye fè sa.
Se konsa, ankò li a yon bon lide yo jwenn bon pratik ak bon abitid koutim
lè w ap travay ak malok ak gratis, pou ke ou pa soufri segmentation
fot, e ke ou itilize dynamique resevwa lajan ou
memwa ak responsabilite.
>> Mwen se Doug Lloyd sa a se CS50.