-
1 # 我有辣條跟我走47
-
2 # mm5364585
實際上函式申請的記憶體比你傳入的大小要多一部分固定記憶體,這一部分儲存一些管理資訊,其中就包括了這塊記憶體的大小,並且這部分資訊就儲存在申請的記憶體指標前面。當釋放記憶體時,指標向前偏移就能拿到這部分管理資訊,因此不需要再傳入記憶體大小了。
-
3 # 七彩寶葫蘆
蓋房子時候要劃好線,砌好牆,裝好門,以防外人誤入。
房主棄之,就不用自己拆了。誰再用這塊地,自己清理去,不清理的話小心有鬼。
-
4 # maxhw
買房子的時候,是從所有待售的房屋中選擇的,可以挑戶型,挑面積。但是,到你賣房子的時候,就只有這一套可以賣。
-
5 # 日衝資訊 黃
回答中有一個說得很形象,malloc申請記憶體時,就像是借錢時要告訴人家借多少,而還錢時,因為都知道了要還多少,就沒有必要再說了。那麼C語言在執行的過程中是怎樣實現的呢?
c語言程式編譯和連結完成之後,會生成一段可執行程式的編碼。這段編碼的結構大致如下:
程式頭部 這是一段固定長度的索引,提示作業系統該程式的棧有多大,程式碼部分有多大,堆的索引資訊的位置等等。靜態區 用來存放全域性變數、靜態變數等棧 存放函式指標,區域性變數(包括指標變數)程式碼部分這部分沒什麼好說的堆的索引資訊 這裡將記錄程式向系統所申請的動態記憶體的資訊,包括它們的位置、大小、狀態等等。它就是開頭說的賬本。資源資料 程式的圖示、文字、介面上的圖片等被放在程式的尾部。程式執行時它們被分別讀到相應的棧或者是堆裡。malloc(int)函式執行時,向系統申請一段動態記憶體,也就是堆上的記憶體。這時系統要先在堆的索引資訊(賬本)中加一條記錄,說明這段記憶體的開始位置、長度等等。這條記錄的位置資訊則作為指標變數的值寫進棧。
malloc是管記賬的函式,需要通知它所需記憶體的大小。free是管銷賬的函式,只要告訴它是哪一條賬目就可以了。
-
6 # Ren
free的時候要是還需要引數就麻煩了,萬一引數錯了,這個堆就別要了。
申請時候的大小人家給你記著呢,不用操心。
-
7 # 沙漠海179470315
就跟
你買鞋買衣服,肯定要告訴賣家你的尺碼。
當你扔掉的時候,你不需要高速垃圾桶你的破鞋和破衣服的尺碼
-
8 # O0o0o0o0O
借錢的時候你得說借多少
不能把所有錢都給你用了
還錢的時候你只要說還哪一筆就行了
多少我這邊會核實的
你說的不能為準
-
9 # 手機行業搬磚民工
csapp上看到過這個,先碼後答
2021.03.28
csapp:Computer Systems,A Programer"s Perspective,中文名是深入理解計算機系統
就像前面老兄講的,系統記著你欠著多少錢呢
第九章 虛擬記憶體,講分配器的概念的時候講到,任何實際的分配器都需要一些資料結構,允許它來區分邊界,以及已分配塊和空閒快。
大多數分配器將這些資訊潛入塊本身。
簡單方法如下圖:
-
10 # win32ksys
malloc申請的是堆記憶體,windows有一套機制追蹤生存週期,當然了,被駭客利用之後就變成了heap spray攻擊
回覆列表
malloc分配的記憶體頭部記錄了本次分配記憶體的大小,頭部後的指標為函式的返回值,free時根據此頭部資訊釋放記憶體,所以不需要額外的引數