一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

heap_2內(nèi)存的特性與分配方法

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-30 10:36 ? 次閱讀

heap_2 內(nèi)存分配方法

heap_2 提供了一個(gè)更好的分配算法,不像 heap_1那樣,heap_2 提供了內(nèi)存釋放函數(shù)。heap_2 不會(huì)把釋放的內(nèi)存塊合并成一個(gè)大塊,這樣有一個(gè)缺點(diǎn),隨著你不斷的申請(qǐng)內(nèi)存,內(nèi)存堆就會(huì)被分為很多個(gè)大小不一的內(nèi)存(塊),也就是會(huì)導(dǎo)致內(nèi)存碎片!

heap_2 的特性如下:

1、可以使用在那些可能會(huì)重復(fù)的刪除任務(wù)、隊(duì)列、信號(hào)量等的應(yīng)用中,要注意有內(nèi)存碎片產(chǎn)生!

2、如果分配和釋放的內(nèi)存 n 大小是隨機(jī)的,那么就要慎重使用了,比如下面的示例:

● 如果一個(gè)應(yīng)用動(dòng)態(tài)的創(chuàng)建和刪除任務(wù),而且任務(wù)需要分配的堆棧大小都是一樣的,那么 heap_2 就非常合適。如果任務(wù)所需的堆棧大小每次都是不同,那么 heap_2 就不適合了,因?yàn)檫@樣會(huì)導(dǎo)致內(nèi)存碎片產(chǎn)生,最終導(dǎo)致任務(wù)分配不到合適的堆棧!

● 如果一個(gè)應(yīng)用中所使用的隊(duì)列存儲(chǔ)區(qū)域每次都不同,那么 heap_2 就不適合了,和上面一樣。

● 應(yīng)用需要調(diào)用 pvPortMalloc()和 vPortFree()來申請(qǐng)和釋放內(nèi)存,而不是通過其他 FreeRTOS 的其他 API 函數(shù)來間接的調(diào)用,這種情況下 heap_2 不適合。

3、如果應(yīng)用中的任務(wù)、隊(duì)列、信號(hào)量和互斥信號(hào)量具有不可預(yù)料性(如所需的內(nèi)存大小不能確定,每次所需的內(nèi)存都不相同,或者說大多數(shù)情況下所需的內(nèi)存都是不同的)的話可能會(huì)導(dǎo)致內(nèi)存碎片。

4、具有不可確定性,但是也遠(yuǎn)比標(biāo)準(zhǔn) C 中的 mallo()和 free()效率高!heap_2 基本上可以適用于大多數(shù)的需要?jiǎng)討B(tài)分配內(nèi)存的工程中,而 heap_4 更是具有將內(nèi)存碎片合并成一個(gè)大的空閑內(nèi)存塊(就是內(nèi)存碎片回收)的功能。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5125

    文章

    19438

    瀏覽量

    313198
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3102

    瀏覽量

    74890
  • FreeRTOS
    +關(guān)注

    關(guān)注

    12

    文章

    485

    瀏覽量

    63518
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語言知識(shí)總結(jié):動(dòng)態(tài)內(nèi)存分配

    動(dòng)態(tài)內(nèi)存分配就 是指在程序執(zhí)行的過程中動(dòng)態(tài)地分配或者回收存儲(chǔ)空間的分配內(nèi)存方法。動(dòng)態(tài)
    發(fā)表于 10-24 15:52 ?978次閱讀

    請(qǐng)問cmd中heap默認(rèn)是在哪個(gè)段分配呢,動(dòng)態(tài)分配段名是什么?

    我cmd文件分配如下,請(qǐng)問:1 stack分配是根據(jù)在子函數(shù)中用到的最大的局部變量,比如數(shù)組大小來分配的么?而heap分配是根據(jù)malloc
    發(fā)表于 07-30 07:55

    請(qǐng)問cmd中heap默認(rèn)是在哪個(gè)段分配呢?

    我cmd文件分配如下,請(qǐng)問:1 stack分配是根據(jù)在子函數(shù)中用到的最大的局部變量,比如數(shù)組大小來分配的么?而heap分配是根據(jù)malloc
    發(fā)表于 10-25 09:53

    基于FreeRTOS內(nèi)存管理Heap_4.c的實(shí)現(xiàn)方法

    fragmentation.)不過經(jīng)過這一次的剖析之后,發(fā)現(xiàn)Heap_4所用的內(nèi)存管理算法為首次適配法(first fit algorithm)。和Heap_2一樣,Heap_4先申
    發(fā)表于 07-15 21:46

    嵌入式系統(tǒng)內(nèi)存分配方式是怎樣的

    一篇講透嵌入式系統(tǒng)內(nèi)存分配方
    發(fā)表于 12-17 07:40

    一種嵌入式系統(tǒng)的內(nèi)存分配方

    嵌入式系統(tǒng)中對(duì)實(shí)時(shí)性的保證,要求內(nèi)存分配過程要盡可能地快。因此在嵌入式系統(tǒng)中,不可能采用通用操作系統(tǒng)中復(fù)雜而完善的內(nèi)存分配策略,一般都采用簡單、快速的
    發(fā)表于 05-24 14:30 ?2474次閱讀

    FreeRTOS代碼剖析之2內(nèi)存管理Heap

    在FreeRTOS8.0.1這個(gè)版本中,一共有四個(gè)內(nèi)存堆模型。這一次講的就是第二個(gè)模型Heap_2.c。從一開始就可以看到注釋中對(duì)Heap_2的模型解釋:這是對(duì)pvPortMalloc
    發(fā)表于 02-09 05:28 ?958次閱讀
    FreeRTOS代碼剖析之<b class='flag-5'>2</b>:<b class='flag-5'>內(nèi)存</b>管理<b class='flag-5'>Heap</b>

    淺談內(nèi)存分配方式 避免內(nèi)存浪費(fèi)問題

    說到內(nèi)存分配方式,就不得不提連續(xù)分配方式。這種方式是指為一個(gè)用戶程序分配一個(gè)連續(xù)的內(nèi)存空間,它曾被廣泛的用于20世紀(jì)60~70年代的OS中
    發(fā)表于 03-03 11:22 ?1521次閱讀

    什么是堆內(nèi)存?堆內(nèi)存是如何分配的?

    在一般的編譯系統(tǒng)中,堆內(nèi)存分配方向和棧內(nèi)存是相反的。當(dāng)棧內(nèi)存從高地址向低地址增長的時(shí)候,堆內(nèi)存從低地址向高地址
    的頭像 發(fā)表于 07-05 17:58 ?1w次閱讀

    韋東山freeRTOS系列教程之內(nèi)存管理(2)

    文章目錄 教程目錄 2.1 為什么要自己實(shí)現(xiàn)內(nèi)存管理 2.2 FreeRTOS的5種內(nèi)存管理方法 2.2.1 Heap_1 2.2.2 Heap_2
    發(fā)表于 11-29 16:58 ?1140次閱讀
    韋東山freeRTOS系列教程之<b class='flag-5'>內(nèi)存</b>管理(<b class='flag-5'>2</b>)

    heap_1內(nèi)存分配方法

    heap_1 內(nèi)存分配方法 動(dòng) 態(tài) 內(nèi) 存 分 配 需 要 一 個(gè) 內(nèi) 存 堆 , FreeRTOS 中 的 內(nèi) 存 堆 為 ucHeap[] , 大 小 為
    的頭像 發(fā)表于 07-30 10:33 ?803次閱讀

    FreeRTOS heap_3內(nèi)存分配方法

    heap_3 內(nèi)存分配方法 這個(gè)分配方法是對(duì)標(biāo)準(zhǔn) C 中的函數(shù) malloc()和 free()的簡單封裝,F(xiàn)reeRTOS 對(duì)這兩個(gè)函數(shù)做了線程保護(hù)。
    的頭像 發(fā)表于 07-30 10:40 ?912次閱讀
    FreeRTOS <b class='flag-5'>heap</b>_3<b class='flag-5'>內(nèi)存</b><b class='flag-5'>分配方法</b>

    heap_4內(nèi)存分配方法介紹

    heap_4 內(nèi)存分配方法 heap_4 提供了一個(gè)最優(yōu)的匹配算法,不像 heap_2,heap
    的頭像 發(fā)表于 07-30 10:42 ?1203次閱讀

    FreeRTOS heap_5內(nèi)存分配方法介紹

    heap_5 內(nèi)存分配方法 heap_5 使用了和 heap_4 相同的合并算法,內(nèi)存管理實(shí)現(xiàn)起
    的頭像 發(fā)表于 07-30 10:47 ?1261次閱讀

    如何自定義內(nèi)存控制器的設(shè)置

    在FreeRTOS中自定義內(nèi)存控制器的設(shè)置,主要涉及到內(nèi)存分配策略的選擇和配置。FreeRTOS提供了多種內(nèi)存分配策略,如
    的頭像 發(fā)表于 09-02 14:28 ?754次閱讀