棧的記憶體
2.1 執行時自動分配和自動**,棧是自動管理的,程式設計師不需要手動干預,方便簡單。
2.2 反覆使用:棧內存在程式中其實就是一塊空間,程式反覆使用這一塊空間。
乙個執行緒中作業系統會給你分配一款空間,作為你的棧。 都是以k為大小。每個棧有乙個棧指標,這個棧指標是作業系統來管理的。
2.3 髒記憶體:棧記憶體由於反覆使用,每次使用後程式不會清理,因此分配到時保留原來的值。
2.4 臨時性:函式不能返回變數的指標,因為這個空間時臨時的。
2.5 棧會溢位:因為作業系統事先給定了棧的大小。
對記憶體詳解
3.1 作業系統對管理器管理:管理器是作業系統的乙個模組,管理器記憶體分配靈活,按需分配。
3.2 大塊記憶體:對記憶體管理者總量很大的作業系統記憶體塊,各程序可以按需申請使用,使用完釋放。
3.3 程式手動申請&釋放:手動意思是需要寫**去申請malloc和釋放free。
3.4 髒記憶體:堆記憶體也是反覆使用的,而且使用者用完釋放前不會清除,因此也是髒的。
3.5 臨時性:對記憶體只在malloc和free之間屬於我這個程序,在malloc之前和free之後,都不能再訪問,否則有不可預料的後果。
3.6 對記憶體使用範例
(1)void * 是個指標型別,malloc返回的是乙個對管理器分配給我本次申請的那段記憶體空間的首位址。(malloc返回的值其實是乙個數字,這個數字表示乙個記憶體位址)為什麼要使用void * 作為型別?主要原因是malloc幫我們分配記憶體時只是分配記憶體空間,至於這段空間將來用來存什麼型別的元素malloc時不關心的,由我們程式自己決定。
(2)什麼時void型別: 早期被翻譯成空型,這個翻譯非常不好,會誤導人,void型別不表示沒有型別,而是萬能型別。void的意思就是說這個資料的型別當前時不確定的,在需要的時候再指定它的具體型別。void*型別是乙個指標型別,這個指標本身佔4各位元組,但是指標指向的型別是不確定的,換句話說這個指標在需要的時候可以被強制轉化其他任何一種確定型別的指標。也就是說這個指標可以指向任何型別的元素。
打個比方:好比中國原來的自留地一樣,比如有50戶人家,500畝地,把這500畝地分為450畝+50畝的方式,450畝屬於人民公社,50畝分給各家作為自留地使用。 可以這麼理解,這50戶好比是50個程序,這450畝是堆記憶體,50畝是棧記憶體。
記憶體的理解
1 在s5pv210中執行的linux系統上,執行應用程式時 所有的應用程式的 和資料都在dram,所以這種結構就是馮諾依曼結構 2 在微控制器中,程式 燒寫在flash中,然後程式在flash中原地執行,程式所涉及到的資料 全域性變數 區域性變數 不能放在flash中,必須放在ram中,這種結構就...
記憶體顆粒的理解
由於工藝上的原因,這個陣列不可能做得太大,所以一般記憶體晶元中都是將記憶體容量分成幾個陣列來製造,也就是說存在記憶體晶元中存在多個邏輯 bank,隨著晶元容量的不斷增加,邏輯bank數量也在不斷增加,目前從32mb到1gb的晶元基本都是4個。晶元組本身設計時在乙個時鐘週期內只允許對乙個邏輯bank進...
記憶體池的理解
掌握記憶體管理對於c c程式設計師的重要性。使用記憶體池的優點有 降低動態申 請記憶體的次數,提公升系統效能,減少記憶體碎片,增加記憶體空間使用率。記憶體池的分類 一 不定長記憶體池 優點 不需要為不同的資料建立不同的記憶體池,缺點是分配出去的記憶體池 不能 到池中 代表有apr pool,obst...