五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

go內(nèi)存管理-內(nèi)存分配-學(xué)習(xí)心得

2023-01-01 15:46 作者:風(fēng)格星辰  | 我要投稿

今天想分享下自己學(xué)習(xí)go內(nèi)存分配的一些心得。

首先,go程序啟動(dòng)時(shí)需要向系統(tǒng)申請(qǐng)內(nèi)存資源。內(nèi)容包含三個(gè)部分

spans:指針,指向arena的指針

bitmap:垃圾回收使用

arena:真正的存儲(chǔ)空間

這個(gè)概念大概了解即可。

go的內(nèi)存管理采用的是分級(jí)管理從cache->central->heap并且采用分類分配,將對(duì)象分為0-66共67類。

通過(guò)內(nèi)存管理單位mspan來(lái)進(jìn)行管理,將內(nèi)存分頁(yè),每頁(yè)8K。

每個(gè)協(xié)程有自己的cache,當(dāng)cache不夠用的時(shí)候向cental申請(qǐng),central不夠向heap申請(qǐng),heap不夠向內(nèi)存申請(qǐng)。

mcache里持有67*2個(gè)類型的mspan。每個(gè)類型的分兩種。一種是需要掃描的即帶指針的,一種是不需要掃描即不帶指針的。主要是為了垃圾回收方便。

mheap持有67*2個(gè)類型的mcentral。每個(gè)類型也分兩種。一個(gè)是需要掃描的,一種是不需要掃描的。

當(dāng)某個(gè)類型的mspan不夠用了,就向?qū)?yīng)類型的mcentral申請(qǐng)資源。

mcentral有兩個(gè)鏈表,一個(gè)是empty已經(jīng)申請(qǐng)的空間,一個(gè)是noempty空閑的可以申請(qǐng)的空間。

申請(qǐng)時(shí)需要加鎖,因?yàn)槭侨仲Y源,避免競(jìng)爭(zhēng)。然后mcentral將從noempty中分配mspan,將其加入到empty中。返回并解鎖。

回收的時(shí)候也一樣,先加鎖。然后將內(nèi)存從empty中刪除,加入到noempty中,然后解鎖。

基本就是這么一個(gè)過(guò)程了。

分配的時(shí)候,如果小于16B并且不包含指針,使用tiny分配。16B到32K的正常分配。大于32K的有mheap分配。

以申請(qǐng)size為n的內(nèi)存為例,分配步驟如下:

  1. 獲取當(dāng)前線程的私有緩存mcache

  2. 跟據(jù)size計(jì)算出適合的class的ID

  3. 從mcache的alloc[class]鏈表中查詢可用的span

  4. 如果mcache沒(méi)有可用的span則從mcentral申請(qǐng)一個(gè)新的span加入mcache中

  5. 如果mcentral中也沒(méi)有可用的span則從mheap中申請(qǐng)一個(gè)新的span加入mcentral

  6. 從該span中獲取到空閑對(duì)象地址并返回

歡迎和諧討論

參考自go專家編程

第四章:內(nèi)存管理 - 4.1 內(nèi)存分配原理 - 《GO專家編程》 - 書(shū)棧網(wǎng) · BookStack


go內(nèi)存管理-內(nèi)存分配-學(xué)習(xí)心得的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
临清市| 彰化县| 武冈市| 襄樊市| 安仁县| 长葛市| 宜春市| 广宗县| 方城县| 蒙城县| 增城市| 六安市| 清丰县| 西吉县| 保山市| 渝北区| 罗源县| 虞城县| 澄江县| 航空| 武宣县| 东海县| 永泰县| 高要市| 伊金霍洛旗| 芦山县| 安吉县| 云和县| 伊春市| 保德县| 岳阳县| 伊通| 威宁| 山东省| 西乌珠穆沁旗| 松阳县| 永吉县| 阳春市| 嘉义县| 宝鸡市| 望谟县|