www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式大雜燴
[導(dǎo)讀]星標(biāo)「嵌入式大雜燴」,一起進(jìn)步!鏈接:https://blog.csdn.net/weixin_37981492/解決問題:malloc在申請(qǐng)內(nèi)存的時(shí)候,內(nèi)存碎片問題會(huì)導(dǎo)致原本內(nèi)存大小足夠,卻申請(qǐng)大內(nèi)存失?。槐热纾涸緝?nèi)存還有10M內(nèi)存,此時(shí)先申請(qǐng)4M內(nèi)存,再申請(qǐng)16Bytes內(nèi)...



解決問題:malloc在申請(qǐng)內(nèi)存的時(shí)候,內(nèi)存碎片問題會(huì)導(dǎo)致原本內(nèi)存大小足夠,卻申請(qǐng)大內(nèi)存失?。?


比如:原本內(nèi)存還有10M內(nèi)存,此時(shí)先申請(qǐng)4M內(nèi)存,再申請(qǐng)16Bytes內(nèi)存,之后把4M內(nèi)存釋放掉,按理來說,此時(shí)應(yīng)該還有 10M - 16Bytes 內(nèi)存,但此時(shí),再去申請(qǐng)8M的大內(nèi)存,則申請(qǐng)失敗。


因?yàn)閙alloc申請(qǐng)的內(nèi)存,必須是一塊連續(xù)的內(nèi)存,但此時(shí)中間已經(jīng)有16Bytes內(nèi)存碎片導(dǎo)致內(nèi)存不連續(xù),所以申請(qǐng)內(nèi)存失??;


以下是我針對(duì)碎片問題,對(duì)內(nèi)存管理機(jī)制做出一種優(yōu)化方案:在開機(jī)初始化內(nèi)存之后,先申請(qǐng)一塊1M左右內(nèi)存(根據(jù)情況修改大?。米鲀?nèi)存碎片管理,然后把這1M內(nèi)存分為很多個(gè)小內(nèi)存,并把小內(nèi)存的地址放在鏈接節(jié)點(diǎn)中,之后申請(qǐng)內(nèi)存時(shí),優(yōu)先判斷內(nèi)存碎片管理中是否有滿足大小的小內(nèi)存。


有的話,直接使用提前申請(qǐng)的小內(nèi)存就可以了,如果內(nèi)存管理機(jī)制中沒有適合的內(nèi)存,但重新用malloc()函數(shù)申請(qǐng);


接下來,解釋我寫的碎片管理機(jī)制:


1.mm_management_init()初始化函數(shù)

void mm_management_init(unsigned int free_memory_start, unsigned int free_memory_end)
傳入?yún)?shù)free_memory_start是內(nèi)存初始化之后,剩余可申請(qǐng)的首地址,該地址,一般會(huì)傳入到main函數(shù),如果main()函數(shù)沒有傳入該參數(shù)的話,可以在內(nèi)存初始化之后,自己malloc(4)申請(qǐng)一下,把返回的地址作為mm_management_init()函數(shù)的第一個(gè)參數(shù);

傳入?yún)?shù)free_memory_end是可以申請(qǐng)的最大地址,每個(gè)IC各有不同;


mm_management_init()對(duì)16bytes,64bytes,256bytes,512bytes,1024bytes,4096bytes這些小內(nèi)存做優(yōu)化,提前計(jì)算小內(nèi)存占用的總大小。


然后直接申請(qǐng)這塊大內(nèi)存占住,再把這塊大內(nèi)存分配給各個(gè)小內(nèi)存,并記錄在鏈表中,比如:mm_fix_16_head


2.mm_management_malloc()申請(qǐng)函數(shù)

unsigned int mm_management_malloc(unsigned int size)
申請(qǐng)內(nèi)存的時(shí)候,先判斷size大小,如果大小可以在內(nèi)存管理機(jī)制中找到,則直接返回提前申請(qǐng)地址,如果大小不滿足,或者小內(nèi)存已被申請(qǐng)完,則用malloc重新申請(qǐng)

在內(nèi)存管理機(jī)制中拿到的小內(nèi)存,該鏈表節(jié)點(diǎn)的標(biāo)記會(huì)設(shè)為MM_STATUS_BUSY


3.mm_management_free()

void mm_management_free(void *mm_ptr)
與mm_management_malloc()相反,先檢查所有小內(nèi)存鏈表是都有該地址,有的話就把該地址內(nèi)存清0,并把標(biāo)記設(shè)為MM_STATUS_FREE;如果是用malloc申請(qǐng)的,當(dāng)時(shí)是free()釋放掉;

接下來是代碼


#include
#include

#define C_MM_16BYTE_NUM    (32)
#define C_MM_64BYTE_NUM    (16)
#define C_MM_256BYTE_NUM   (12)
#define C_MM_512BYTE_NUM   (12)
#define C_MM_1024BYTE_NUM   (18)
#define C_MM_4096BYTE_NUM   (30)

#define C_MM_16BYTE     (16)
#define C_MM_64BYTE     (64)
#define C_MM_256BYTE    (256)
#define C_MM_512BYTE    (512)
#define C_MM_1024BYTE    (1024)
#define C_MM_4096BYTE    (4096)

#define C_MM_MAX_SIZE    C_MM_4096BYTE //碎片管理最大的碎片大小

#define MM_STATUS_FREE    (0) //0:表示內(nèi)存空閑
#define MM_STATUS_BUSY    (1) //1:表示內(nèi)存已被申請(qǐng)

#define MM_STATUS_OK                (0)
#define MM_STATUS_FAIL              (1)

typedef struct mm_node_struct {
unsigned int *mm_node; //存放內(nèi)存節(jié)點(diǎn)指針
unsigned short   iflag; //指針是否空閑
struct P_MM_Node_STRUCT *next; //指向下一個(gè)內(nèi)存節(jié)點(diǎn)指針
} MM_Node_STRUCT, *P_MM_Node_STRUCT;

typedef struct mm_sdram_struct {
unsigned int count;
P_MM_Node_STRUCT  *next;
} MM_SDRAM_STRUCT, *P_MM_SDRAM_STRUCT;

static MM_SDRAM_STRUCT mm_fix_16_head;
static MM_SDRAM_STRUCT mm_fix_64_head;
static MM_SDRAM_STRUCT mm_fix_256_head;
static MM_SDRAM_STRUCT mm_fix_512_head;
static MM_SDRAM_STRUCT mm_fix_1024_head;
static MM_SDRAM_STRUCT mm_fix_4096_head;

static P_MM_SDRAM_STRUCT pmm_fix_16_head =

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

阿聯(lián)酋迪拜2025年8月26日 /美通社/ -- 納斯達(dá)克上市公司Robo.ai Inc.今日正式宣布完成品牌煥新升級(jí),并于8月26日正式啟用全新納斯達(dá)克股票代碼"...

關(guān)鍵字: AI 人工智能 代碼 智能科技

北京2025年8月13日 /美通社/ -- 近日,北京積算科技有限公司(以下簡(jiǎn)稱"積算科技")推出一站式AlphaFold3在線算力服務(wù),現(xiàn)已開放免費(fèi)使用。其內(nèi)置優(yōu)化后的AlphaFold3模型,支持...

關(guān)鍵字: ALPHA 代碼 圖形化 蛋白質(zhì)

北京2025年7月21日 /美通社/ -- 浪潮信息宣布元腦企智一體機(jī)已率先完成對(duì)Kimi K2 萬億參數(shù)大模型的適配支持,并實(shí)現(xiàn)單用戶70 tokens/s的流暢輸出速度,為企業(yè)客戶高效部署應(yīng)用大模型提供高處...

關(guān)鍵字: 模型 AGENT TOKEN 代碼

7月18日,一則“微信安卓安裝包出現(xiàn)5處fxxk”的話題,迅速登上微博熱搜,吸引了眾多網(wǎng)友的熱議和關(guān)注。

關(guān)鍵字: 代碼 程序員

共鑒AI未來,緬懷先輩貢獻(xiàn) 深圳 2025年5月21日 /美通社/ -- 5月16日下午,深圳市金澄智創(chuàng)AI+傳承迎來了喬遷之喜,一場(chǎng)意義非凡的活動(dòng)在新址盛大舉行。活動(dòng)現(xiàn)場(chǎng)星光熠熠,莊世平前輩之子莊榮新先生、南方財(cái)經(jīng)...

關(guān)鍵字: AI AI技術(shù) BSP 代碼

C語言代碼優(yōu)化與性能提升是軟件開發(fā)中至關(guān)重要的一環(huán)。優(yōu)化C語言代碼不僅可以提高程序的執(zhí)行效率,還可以減少資源消耗,提升用戶體驗(yàn)。

關(guān)鍵字: C語言 代碼

Qt 路線圖致力于實(shí)現(xiàn)與各行業(yè)技術(shù)棧的無縫集成,助力企業(yè)與開發(fā)者使用自選工具,更高效地構(gòu)建、擴(kuò)展和維護(hù)軟件解決方案。 芬蘭埃斯波 2025年5月7日 /美通社/ -- 在今日舉行的2025年Qt全球峰會(huì)上,Qt...

關(guān)鍵字: GROUP 生態(tài)系統(tǒng) 開發(fā)者 代碼

——首批"專家級(jí)數(shù)字員工"部署上崗,構(gòu)建組織傳承與人才戰(zhàn)略的AI導(dǎo)師矩陣 北京2025年4月25日 /美通社/ -- 在生成式AI技術(shù)加速重構(gòu)組織能力與人才機(jī)制的當(dāng)下,如何留住專家經(jīng)驗(yàn)、培養(yǎng)管理人才...

關(guān)鍵字: AI 智能體 矩陣 代碼

深圳2025年4月21日 /美通社/ --?近日,國家發(fā)展改革委公布第 31 批國家企業(yè)技術(shù)中心認(rèn)定名單,華測(cè)檢測(cè)認(rèn)證集團(tuán)股份有限公司(股票代碼:300012.SZ,簡(jiǎn)稱 "CTI 華測(cè)檢測(cè)")憑借在檢驗(yàn)檢測(cè)領(lǐng)域的全鏈條...

關(guān)鍵字: TI IC 代碼 半導(dǎo)體

珠海2025年3月13日 /美通社/ -- 近期,AI工具DeepSeek引發(fā)廣泛關(guān)注,大量非專業(yè)投資者試圖借助其生成股票策略,卻面臨現(xiàn)實(shí)困境:平臺(tái)輸出的Python代碼策略對(duì)零編程基礎(chǔ)用戶存在極高使用門檻。即...

關(guān)鍵字: EPS 代碼 PSE AI
關(guān)閉