freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

mocor平臺(tái)內(nèi)存管理介紹及案例分析-wenkub

2023-01-24 04:23:27 本頁(yè)面
 

【正文】 //pool39。之前我們提到過(guò),為了避免浪費(fèi)內(nèi)存,通常是分配多個(gè)內(nèi)存池,分別對(duì)應(yīng)不同的大小。 ? Static heap:主要用于分配常駐的內(nèi)存,即一旦分配就不再釋放的內(nèi)存。這三個(gè)字節(jié)池的分別是: dynamic base heap,static heap和 dynamic app heap。 保密信息 . 23 2022/2/6 MOCOR內(nèi)存管理 ? (heap)管理 : ? MOCOR平臺(tái)的堆內(nèi)存就是前面講到的內(nèi)存字節(jié)池。每次分配時(shí)只需要取鏈表頭即可,無(wú)須遍歷內(nèi)存塊池來(lái)找到空閑塊。如果一個(gè)內(nèi)存塊池的尺寸足夠大,可以滿足用戶最極限的內(nèi)存分配需求,那么,這個(gè)內(nèi)存塊池上分配許多不同尺寸的內(nèi)存會(huì)導(dǎo)致嚴(yán)重的內(nèi)存浪費(fèi)。 ? 分配和釋放的速度很快。當(dāng)內(nèi)存池中還有 500字節(jié)的剩余內(nèi)存時(shí),應(yīng)用程序申請(qǐng) 200字節(jié)的內(nèi)存,在什么情況下,這樣的申請(qǐng)不能滿足? 保密信息 . 15 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池( BLOCK POOL) 保密信息 . 16 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池 ?: ? 內(nèi)存塊池也是一個(gè)連續(xù)的字節(jié)塊,但它是由一定數(shù)量的固定 szie的內(nèi)存塊組成的。 ? 分配一塊內(nèi)存所需要的時(shí)間跟分配內(nèi)存的大小,字節(jié)池中的碎片數(shù)等因素有關(guān),如果字節(jié)池有 2022字節(jié)的空閑塊,花多長(zhǎng)時(shí)間找到這塊內(nèi)存也是沒(méi)有保證的。這是在代碼里實(shí)現(xiàn)指定的一個(gè)具體數(shù)值,在分配內(nèi)存時(shí),如果要分配的內(nèi)存大小大于這一數(shù)值,則從字節(jié)池的底部開(kāi)始分配。該結(jié)構(gòu)的定義如下: 保密信息 . 10 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 保密信息 . 11 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存字節(jié)池 ?: ? 從字節(jié)池中分配內(nèi)存類似于 C語(yǔ)言的 malloc調(diào)用,該調(diào)用返回所需內(nèi)存的數(shù)量(以字節(jié)為單位)。 ? 內(nèi)存字節(jié)池類似于 C語(yǔ)言里的堆 (heap),所以,字節(jié)池我們也可以把它叫做字節(jié)堆,代碼里我們也可以看到創(chuàng)建的字節(jié)池通常以 heap來(lái)命名。本文中所指的內(nèi)存管理,就是指動(dòng)態(tài)分配內(nèi)存的管理。 ? 靜態(tài)分配是指在編譯或鏈接時(shí)將程序所需的內(nèi)存空間分配好。采用這種分配方案的內(nèi)存段,其大小一般在編譯時(shí)就能夠確定。 保密信息 . 4 2022/2/6 MOCOR內(nèi)存管理的基本架構(gòu) MOCOR內(nèi)存管理體系的一個(gè)大致的調(diào)用層次如下圖所示: 物 理 內(nèi) 存字 節(jié) 池塊 池M M I A P Ps t a t i c多 個(gè) 不 同 s i z e 的 塊 池b a s e a p p接 口B L O C K M E M保密信息 . 5 2022/2/6 MOCOR內(nèi)存管理的基本架構(gòu) ? 從可用的內(nèi)存資源的角度,還可以得到下面的一個(gè)內(nèi)存分配圖。但與一般意義上的堆的不同在于, ThreadX里的字節(jié)池可以有多個(gè), MOCOR平臺(tái)也是利用了這一特性,根據(jù)不同的需求而創(chuàng)建了多個(gè) heap。分配的原則是“首次符合”原則,就是說(shuō),當(dāng)?shù)谝粋€(gè)空閑內(nèi)存塊的大小滿足需求時(shí),就從該內(nèi)存塊分配內(nèi)存,然后將該內(nèi)存塊的剩余內(nèi)存轉(zhuǎn)換成一個(gè)新塊。采用這種分配方式是為了減少內(nèi)存碎片的產(chǎn)生,盡量把大內(nèi)存的分配區(qū)域和小內(nèi)存的分配區(qū)域分開(kāi)。因此,在時(shí)間要求苛刻的任務(wù)中應(yīng)避免使用字節(jié)池。因此,從一個(gè)內(nèi)存塊池中分配出的內(nèi)存總是固定大小的。所需的時(shí)間相當(dāng)于簡(jiǎn)單的鏈表操作,分配時(shí)不需要搜索整個(gè)內(nèi)存塊列表,它總是使用鏈表頭部的內(nèi)存塊來(lái)分配。一種解決辦法是同時(shí)創(chuàng)建幾個(gè)不同的內(nèi)存塊池,每個(gè)內(nèi)存塊池分別容納不同尺寸的內(nèi)存塊。 保密信息 . 19 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池 ?: 控 制 塊 的 地 址下 一 塊 內(nèi) 存 的 地 址空 閑 的 內(nèi) 存 塊控 制 塊控 制 塊 的 地 址已 分 配 的 內(nèi) 存 塊已 分 配 的 內(nèi) 存 塊? ?N U L L空 閑 的 內(nèi) 存 塊下 一 塊 內(nèi) 存 的 地 址空 閑 的 內(nèi) 存 塊保密信息 . 20 2022/2/6 ThreadX的內(nèi)存管理 內(nèi)存塊池 思考 ? 如何計(jì)算一個(gè)內(nèi)存塊池所占用的物理內(nèi)存大小 ? 保密信息 . 21 2022/2/6 MOCOR平臺(tái)內(nèi)存管理介紹 ?MOCOR內(nèi)存管理的基本架構(gòu) ?ThreadX的內(nèi)存管理 ?MOCOR的內(nèi)存管理 ?MOCOR內(nèi)存 bug實(shí)例分析 保密信息 . 22 2022/2/6 MOCOR內(nèi)存管理 ? MOCOR平臺(tái)在 ThreadX內(nèi)存管理的基礎(chǔ)上,又做了進(jìn)一步的封裝,這樣可以更便于上層應(yīng)用調(diào)用。最早的 MOCOR平臺(tái)只有一個(gè)內(nèi)存堆,但在實(shí)際使用中發(fā)現(xiàn),程序運(yùn)行時(shí)往往要交錯(cuò)的分配一些動(dòng)態(tài)內(nèi)存和常駐內(nèi)存,這樣會(huì)產(chǎn)生很多無(wú)法消除的內(nèi)存碎片。同樣,對(duì)應(yīng)著三個(gè)heap也有三個(gè)不同的接口,分別是 : ? SCI_ALLOC_BASE, ? SCI_ALLOC_CONST ? SCI_ALLOC_APP。 ? App heap: 其他不屬于以上兩種情況的內(nèi)存都在這里分配。 MOCOR平臺(tái)一共創(chuàng)建了 12個(gè)內(nèi)存池,其對(duì)應(yīng)的大小和包含的內(nèi)存塊的數(shù)目都定義在 : ? define POOL_1_BLOCK_SIZE 16 //pool39。s block number ? define POOL_3_BLOCK_SIZE 40 //pool39。s block number ? define POOL_5_BLOCK_SIZE 112 //pool39。s block number ? define POOL_7_BLOCK_SIZE 300 //pool39。s block number ? define POOL_9_BLOCK_SIZE 800 //pool39。s block number ? define POOL_B_BLOCK_SIZE 1300 //pool39。s block number ? (以上的定義不同版本的 MOCOR可能并不一致,經(jīng)常會(huì)有調(diào)整 ) 保密信息 . 29 2022/2/6 MOCOR內(nèi)存管理 什么時(shí)候在 heap上分配,什么時(shí)候在內(nèi)存池上分配? ? MOCOR對(duì)分配內(nèi)存的位置有如下的約定:只有分配的內(nèi)存的大小超過(guò) ,內(nèi)存才會(huì)在 heap里分配,否則就在內(nèi)存塊池里分配。如果全部遍歷完都沒(méi)有找到可用的內(nèi)存池,則改為在 heap上分配內(nèi)存。 ? file_name , line: 分配該塊內(nèi)存的文件名和行號(hào) ? size : 內(nèi)存大小 (不包括 header) ? block_num: 系統(tǒng)分配的內(nèi)存塊總計(jì) ? 此外,為了能檢查內(nèi)存越界,在每一塊分配內(nèi)存的最后也會(huì)額外多分配一個(gè)字節(jié)做為END FLAG,內(nèi)存分配時(shí)該字節(jié)會(huì)被寫(xiě)入 0xAA。每分配一塊新的內(nèi)存,就將這塊內(nèi)存的 header加到鏈表的最后。輸入 5,打出當(dāng)前的內(nèi)存信息。那么哪些物理內(nèi)存是我們能夠動(dòng)態(tài)分配使用的呢,我們是如何知道可以動(dòng)態(tài)分配的物理內(nèi)存的地址范圍呢?
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1