回覆列表
  • 1 # 我有辣條跟我走47

    malloc分配的記憶體頭部記錄了本次分配記憶體的大小,頭部後的指標為函式的返回值,free時根據此頭部資訊釋放記憶體,所以不需要額外的引數

  • 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攻擊

  • 中秋節和大豐收的關聯?
  • 穿著衣服按摩能有作用嗎?