99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

如何解決內(nèi)存碎片問題-創(chuàng)新互聯(lián)

這篇文章主要為大家詳細(xì)介紹了解決內(nèi)存碎片問題的方法,文中示例代碼介紹的非常詳細(xì),圖文詳解容易學(xué)習(xí),非常適合初學(xué)者入門。

創(chuàng)新互聯(lián)公司專注于企業(yè)全網(wǎng)營銷推廣、網(wǎng)站重做改版、羅山網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5建站成都商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價格優(yōu)惠性價比高,為羅山等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

經(jīng)常的new  delete 導(dǎo)致可用內(nèi)存越來越小, 這就是內(nèi)存碎塊
就是內(nèi)存有各種各樣大小不一樣的節(jié)點(diǎn) ,
長時間在 new  delete 這時候操作系統(tǒng) 在內(nèi)存,
上分一塊內(nèi)存給你, 分出去了 好幾塊,內(nèi)存緊張了, 釋放這中間 就有一些內(nèi)存用不了
就是有一些很小的空閑內(nèi)存, 但是你申請的空間 可能就比他們要大,
什么東西需要防止內(nèi)存碎片呢?一般需要大量數(shù)據(jù)節(jié)點(diǎn)的,都需要自己的緩沖池
也就是根據(jù)系統(tǒng)的負(fù)載開一塊很大的內(nèi)存出來,比如一個在線用戶的信息 節(jié)點(diǎn)
因?yàn)槟阋惶斓幕钴S用戶可能上萬,但是當(dāng)前可能在線的可能只有三千,五千
也就是你一天 會有成千上萬的用戶 上線, 如果去沖擊系統(tǒng)的new malloc
,那么就會造成內(nèi)存碎片為了 解決這個文件,就要對這些節(jié)點(diǎn)做緩沖池**
如何解決內(nèi)存碎片問題

代碼設(shè)計(jì)

#define MAX_SESSION_NUM 6000  //緩沖池大小
#define my_malloc malloc 
#define my_free free

//用戶節(jié)點(diǎn)結(jié)構(gòu)體
struct  session{
   char c_ip[32];
   int c_port;
   int c_sock;
   struct  session * _next;

};

struct {

   struct session* online_session;

   struct session* cache_mem; //緩存池

   struct session* free_list;  //鏈表頭指針

}session_manager ;

//清空內(nèi)存
   memset(&session_manager, 0, sizoef(session_manager));
   //將6000節(jié)點(diǎn)  一次緩沖池分配出來 
   session_manager.cache_mem = (struct session*)my_malloc(MAX_SESSION_NUM * sizeof(struct session));
   memset(session_manager.cache_mem, 0, MAX_SESSION_NUM * sizeof(struct session));
     //把沒有使用的list全部放在 free_list 鏈表
       for (int i = 0; i<MAX_SESSION_NUM;i++){
     session_manager.cache_mem[i]._next = session_manager.free_list;
     session_manager.free_list = &session_manager.cache_mem[i];

   }

   定義分配器
   static struct session* cache_alloc(){
   struct session*s = NULL;
   //可用的 緩沖池 必須是有節(jié)點(diǎn) 才能分配
   if (session_manager.free_list != NULL){
     s = session_manager.free_list;
     //因?yàn)閒ree_list 指向緩沖池里最后一個節(jié)點(diǎn)
     //分配一個后 這個可用緩沖池 就指向上一個緩沖節(jié)點(diǎn)  
     session_manager.free_list = s->_next;
   }
   else{
   //當(dāng)可用緩沖池用完,防止程序奔潰 在極少數(shù)的情況下
   //這時候就要調(diào)用系統(tǒng)的分配內(nèi)存  
   //少次數(shù)的調(diào)用malloc  不會引發(fā)內(nèi)存碎片
     s = my_malloc(sizeof(struct  session));

   }
   //情況當(dāng)前內(nèi)存信息  應(yīng)為可能存在使用情況
   memset(s,0, sizeof(struct session));
   return s;
}

static void cache_free(struct session* s)
{
   //判斷是從 cache 分配的 還是從系統(tǒng) malloc分配的
   //只需要判斷 他的內(nèi)存范圍 是不是在這個分配的內(nèi)存里面
   if (s >= session_manager.cache_mem && s < session_manager.cache_mem + MAX_SESSION_NUM)
   {
     //內(nèi)存不釋放  
     //當(dāng)前使用的 上一個就是申請時 賦值給free_list的
     s->_next = session_manager.free_list;
     //記錄當(dāng)前這個節(jié)點(diǎn)
     session_manager.free_list = s;

   }
   else{//系統(tǒng)分配的
     my_free(s);
   }
}

這是上面的調(diào)試信息
如何解決內(nèi)存碎片問題

以上就是解決內(nèi)存碎片問題的詳細(xì)介紹,內(nèi)容較為全面,而且我也相信有相當(dāng)?shù)囊恍┕ぞ呖赡苁俏覀內(nèi)粘9ぷ骺赡軙姷交蛴玫降摹Mㄟ^這篇文章,希望你能收獲更多。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站標(biāo)題:如何解決內(nèi)存碎片問題-創(chuàng)新互聯(lián)
網(wǎng)頁網(wǎng)址:http://www.yijiale78.com/article36/docssg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)品牌網(wǎng)站制作網(wǎng)站營銷商城網(wǎng)站ChatGPT手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)