¥á¥â¥ê´ÉÍý(¤³¤Îµ­»ö¤Ï2008ǯ8·î21Æü¤Ë½Ð¸½¤·¤Þ¤·¤¿)

º£¤Î¼ÂÁõ

  • ¡Ö9ÆüÌܡ׽ªÎ»¡£¡Ö10ÆüÌÜ¡×Ⱦʬ¼å¤¯¤é¤¤½ª¤ï¤Ã¤¿¤¢¤¿¤ê¤È²¾Äê
  • ¹½Â¤ÂΤ¬ÃúÅÙ1026Byte¤À¤Ã¤¿¤ê4100Byte¤À¤Ã¤¿¤ê¤¹¤ë¤ÈÀ¨¤¯Èᤷ¤¤¤Î¤Ç¡¢
    ¤È¤ê¤¢¤¨¤º1Byteñ°Ì¤Ç³ÎÊÝ/²òÊü¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤¿¡£
    ¥á¥â¥ê¤Î̵Â̤Ϸù¤À¤«¤é¤Í

º£Æü¤ÎÎÁÍý

¤È¤ê¤¢¤¨¤º¥á¥â¥ê¤Ï¸Â¤é¤ì¤Æ¤ë¤ó¤À¤·¡¢¥á¥â¥ê´ÉÍý¤ò¤â¤¦¾¯¤·¿¿ÌÌÌܤˤä¤ë¤«
²òÊü¥ß¥¹¤·¤¿¤é¤½¤Îʬ¤ÏÁ´¤¯»È¤¨¤Ê¤¤¤Î¤ÏÄˤ¤¤è¤Ê¤¡¡¦¡¦¡¦
¤è¤·¡¢²òÊü¥ß¥¹¤·¤¿Ê¬¤â¤¢¤È¤ÇÉü³è¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤«

¼º¤ï¤ì¤¿¥á¥â¥ê¡¢¤É¤¦¤¹¤ë¤è¡©

¤¢¤Îͭ̾¤Ê²«ÎÐËܤνéÈǤǸÀ¤¦¤È¤³¤í¤Î189¥Ú¡¼¥¸(9¾Ï4Àá)¤Ëû¤¯

¤Þ¤¿¡¢¤É¤¦¤·¤Æ¤â¤Þ¤È¤á¤é¤ì¤Ê¤¤¾õ¶·¤¬µ¯¤­¤Æ¡ÊÃæÎ¬¡Ë¼ÂºÝ¤ÎOS¤Ç¤Ï¤¤¤í¤¤¤í¹©Éפ·¤Æ¤¤¤ë¤è¤¦¤Ç¤¹¡£
¤Ò¤È¤Þ¤ºËº¤ì¤ë¤±¤É¡¢¤¢¤È¤Çmemman¤Ë;͵¤¬½ÐÍ褿»þ¤Ë»ÈÍÑÃæ¤Î¥á¥â¥ê¤òºÆ¥Á¥§¥Ã¥¯¤·¤Æ²¿¤È¤«Éü³è¤µ¤»¤ë¤È¤«¡¢
¤È¤Ó¤È¤Ó¤Ë¤Ê¤Ã¤Æ¤­¤¿¤é¡¢ºÇ½é¤ÎÊýË¡¤Ë¼«Æ°¤ÇÀÚ¤êÂØ¤¨¤ë¤È¤«¡¢¤½¤¦¤¤¤¦¤â¤Î¤Ç¤¹¡£

¤³¤³¤Ç¤Õ¤Èµ¿Ì䤬É⤫¤Ó¤Þ¤¹¡£³Î¤«¡ÖºÇ½é¤ÎÊýË¡¡×¤Ï¡Öº£»È¤Ã¤Æ¤ëÀ¨¤¯Â®¤¤ÊýË¡¡×¤è¤ê¥á¥â¥ê¤ò¿©¤¦¤Ï¤º¡¦¡¦¡¦
¤Ä¤Þ¤êº£¤Î»ä¤Ë¤Ï²¿¤È¤«Éü³è¤µ¤»¤ëËàëÅÉԻ׵ĤÊÊýË¡¤·¤«¸¶Íý¾åºî¤ì¤Ê¤¤¤ï¤±¤Ç¤¹¡£¤µ¤Æ¤É¤¦¤¹¤Ã¤«¡£

¿§¡¹2Æü¤¯¤é¤¤¹Í¤¨¤Æ¤¿¤é¡¢¥¢¥¤¥Ç¥¢¤¬É⤫¤Ó¤Þ¤·¤¿¡£¡Ö²òÊü¥ß¥¹¤·¤¿Îΰè¤ò»È¤¨¤Ð¤¤¤¤¤ó¤¸¤ã¤Í¡©¡×
¤·¤«¤·³«Êü¥ß¥¹¤·¤¿Îΰè¤Î¥µ¥¤¥º¤Ï¡¢¤¢¤Î¼êÈ´¤­¤ò½¤Àµ¤·¤Æ¤·¤Þ¤Ã¤¿¤éÀ¨¤¯¾®¤µ¤¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

¤¢¤Î¼êÈ´¤­
½éÈǤǸÀ¤¦192¥Ú¡¼¥¸¤ÇƲ¡¹¤È¤ä¤é¤«¤·¤Æ¤¤¤ë¡¢¤¢¤Î¼êÈ´¤­¤Ç¤¢¤ë¡£

¤·¤«¤â¤½¤ó¤Ê¼êÈ´¤­¤ò½¤Àµ¤·¤Ê¤¯¤Æ¤â¡¢¤ä¤Ã¤Ñ¤êÎΰè¤Î¥µ¥¤¥º¤Ï²ÄÊÑĹ¡£´ÉÍýÍѤο·¤¿¤Ê¹½Â¤ÂΤ¬Æþ¤ëÊݾڤϤ¢¤ê¤Þ¤»¤ó¡£
¤½¤Î¹½Â¤ÂΤ¬¤¹¤Ã¤Ý¤ê¼ý¤Þ¤ë¤è¤¦¤Ê¥µ¥¤¥º¤òºÇÄ㥵¥¤¥º¤Ë¤·¤Æ¤â¤¤¤¤¤±¤É¡¢¤É¤¦¤»¹½Â¤ÂΤË8KiB¤È¤«»È¤Ã¤Æ¤â
ÊѤʳÎÊÝ/²òÊü¤ò·«¤êÊÖ¤µ¤Ê¤¤¸Â¤ê¸å¤í¤ÎÊý¤Ï¤¬¤é¶õ¤­¤Ç¤¹¡£

KiB
ñ°Ì¡£1KiB=1024Byte¡£1KB¤È½ñ¤¯¤È1000Byte¤Î»ö¤Ê¤Î¤«1024Byte¤Î»ö¤Ê¤Î¤«È½Ê̤¬¤Ä¤­¤Å¤é¤¤»ö¤¬¤¢¤ë¤Î¤Ç¡¢»ä¤ÏÂçÄñ¤³¤Ã¤Á¤Îñ°Ì¤ò»È¤¦¡£

¤È¤¤¤¦¤³¤È¤Ç¡¢¡Ö¹½Â¤ÂΤΥµ¥¤¥º¤¬¤È¤Æ¤â¾®¤µ¤¤¡×¤È¡ÖÊ£»¨¤Ç¤Ï¤Ê¤¤¡×¡¢¤½¤ì¤Ë¡Ö¼ÂÍÑŪ¤Ê»þ´Ö¤Çư¤¯¡×¤ò
Ʊ»þ¤ËËþ¤¿¤¹¤è¤¦¤ÊÅۤϤʤ«¤Ã¤¿¤«¤Ê¤ÈƬ¤Î°ú¤­½Ð¤·¤ò¤Ò¤Ã¤¯¤êÊÖ¤·¤Æ¤ß¤ë¤È¡¢¡ÖÊÒÊý¸þ¥ê¥¹¥È¡×¤È¤¤¤¦Ã±¸ì¤¬½Ð¤Æ¤­¤Þ¤·¤¿¡£
¤³¤¤¤Ä¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿¤òMEMMAN¹½Â¤ÂΤˡ¦¡¦¡¦¤Ã¤Æ¡¢ÊÒÊý¸þ¥ê¥¹¥È¤ÎÀâÌÀ¤¬¤Þ¤À¤Ç¤·¤¿¤¹¤ß¤Þ¤»¤ó¡£

ÊÒÊý¸þ¥ê¥¹¥È¤È¸À¤¦¤Î¤Ï¡¢´ðËÜŪ¤Ë¤Ï¼¡¤Î¤è¤¦¤Ê¹½Â¤¤Ç¤¹¡£

struct SinglyLinkedList {
    int data; // ³ÊǼ¤·¤Æ¤¤¤ë¥Ç¡¼¥¿
    struct SinglyLinkedList *next; // ¼«Ê¬¤ÈƱ¤¸¹½Â¤ÂΤؤΥݥ¤¥ó¥¿
};


¤½¤·¤Æ¡¢wikipedia¤Ë¤¤¤¤²èÁü¤Èʸ¾Ï¤¬¤¢¤Ã¤¿¤Î¤Ç¤³¤ì¤ò¸«¤Æ¤â¤é¤¨¤ì¤Ðʬ¤«¤ë¤È»×¤¦¤Î¤Ç¤¹¤¬¡¢
http://ja.wikipedia.org/wiki/%E9%80%A3%E7%B5%90%E3%83%AA%E3%82%B9%E3%83%88#.E7.89.87.E6.96.B9.E5.90.91.E3.83.AA.E3.82.B9.E3.83.88
Íפ¹¤ë¤ËSinglyLinkedList¹½Â¤ÂΤΥá¥ó¥Ð¤Ç¤¢¤ënext¤¬Ê̤ξì½ê¤Ë¤¢¤ëSinglyLinkedList¹½Â¤ÂΤò»Ø¤·¤Æ¡¢
·Ò¤¬¤Ã¤Æ¤¤¤ë¤è¤¦¤Ë¿¶Éñ¤¦¤ï¤±¤Ç¤¹¡£

¤µ¤Æ¡¢¤³¤Î¹½Â¤ÂΤò³ÎÊݤ¹¤ë¤Î¤ËɬÍפʥµ¥¤¥º¤Ï12Byte¤«¤Ê¡©

struct MEMLIST {
    void* addr; // ¼º¤ï¤ì¤¿¶õ¤­ÎÎ°è¤Ø¤Î¥¢¥É¥ì¥¹
    unsigned int size; // ¤È¤½¤Î¥µ¥¤¥º
    struct MEMLIST *next;
};


¤Ê¤ó¤È¤«¤·¤Æ8byte¤«16byte¤«¤Ë(¤Ç¤­¤ì¤Ð8byte¤Ø)¤Ç¤­¤Ê¤¤¤«¤Ê¤¡¡£¤½¤¦¤¹¤ì¤Ð³ä¤ê»»¤â®¤¤¤·¡£

¤è¤¯¹Í¤¨¤è¤¦¡£

¾¯¤·¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£¤³¤Î¹½Â¤ÂΤϰìÂΤɤ³¤ËÇÛÃÖ¤µ¤ì¤ë»ö¤Ë¤Ê¤ë¤«¤ò¡£
¤½¤¦¡¢³«Êü¥ß¥¹¤·¤¿Îΰè¤Î¡¢¤ª¤½¤é¤¯ÀèÆ¬¤«ºÇ¸åÈø¤ËÇÛÃÖ¤µ¤ì¤ë¤è¤¦¤Ë¼ÂÁõ¤¹¤ëȦ¤Ç¤¹¡£
¤¹¤ë¤Ènext¥á¥ó¥Ð¤äsize¥á¥ó¥Ð¤«¤é¼¡¤Î¹½Â¤ÂΤÎaddr¥á¥ó¥Ð¤ÎÃͤòÆÃÄê½ÐÍè¤ë¤¸¤ã¤Ê¤¤¤Ç¤¹¤«¡£
¤È¤¤¤¦»ö¤Ïaddr¥á¥ó¥Ð¤Ï¼ÂÁõ¾å¤Ï¡¢¤¤¤é¤Ê¤¤¤Î¤«¤Ê¡£(¹½Â¤ÂΤΥµ¥¤¥º¤Ï8Byte¤Ë¤Ê¤Ã¤¿¤è)

struct MEMLIST {
    unsigned int size; // ¼º¤ï¤ì¤¿¶õ¤­Îΰè¤Î¥µ¥¤¥º
    struct MEMLIST *next;
};


¤µ¤ÆMEMMAN¹½Â¤ÂΤˤ³¤Î¥ê¥¹¥È¤ÎÀèÆ¬¥Ý¥¤¥ó¥¿¤ò³Ð¤¨¤Æ¤ª¤¤¤ÆÌ㤪¤¦¡£
Éü³è¤µ¤»¤ë»þ¤Ï¤³¤¤¤Ä¤«¤é¸Æ¤Ó½Ð¤»¤Ð¤¤¤¤¤ï¤±¤À¡£

struct MEMMAN {
    int frees, maxfrees, lostsize, losts;
    struct FREEINFO free[MEMMAN_FREES];
    struct MEMLIST *list; // ¥ê¥¹¥È¤ÎÀèÆ¬¤Ø¤Î¥Ý¥¤¥ó¥¿
};


¤µ¤Æ¡¢¤³¤¤¤Ä¤ò´Þ¤á¤¿½é´ü²½¤ò¤·¤Ê¤¤¤È¤ª¤½¤é¤¯ÊѤʻö¤Ë¤Ê¤ë¤Î¤Ç½ñ¤­´¹¤¨¤Æ¤ª¤³¤¦¤«¡£
(memman_initÆâÉô)

man->list=LIST_END;     // ²òÊü¤Ë¼ºÇÔ¤·¤¿Îΰè¤òÉü¸µ¤µ¤»¤ë¤¿¤á¤Î¥Ò¥ó¥È(LIST_END¤Ï¥Ø¥Ã¥À¤«¤É¤³¤«¤ÇÄê¿ô¤È¤·¤ÆÄêµÁ¡£)


LIST_END¤ÎÃͤϤȤꤢ¤¨¤º0¤Ç¤¤¤¤¤«¤Ê¤¡¡£

#define LIST_END 0


¤È¤ê¤¢¤¨¤º¼ê¤òÈ´¤«¤ì¤¿Éôʬ¤Ï½¤Àµ¤·¤Æ¤ª¤³¤¦¤«¤Ê¡¢Å¬Åö¤Ë¡£
(memman_freeÆâÉô¡¢¤«¤Ê¤ê²¼¤ÎÊý)

/* ¸å¤í¤Ë¤º¤é¤»¤Ê¤«¤Ã¤¿ */
// ºÇ¤â¾®¤µ¤Ê¶õ¤­Îΰè¤òõ¤¹(¤³¤³¤«¤éÄɵ­)
unsigned int lostaddr,lostsize;
lostsize=size;// º£³«ÊüÍ׵᤬Í褿ÅÛ¤è¤ê¾®¤µ¤¤ÅÛ¤òõ¤»¤Ð¤¤¤¤¡£
j=-1;
for(i=0;i<MEMMAN_FREES;i++){
    if(lostsize>man->free[i].size){
        lostsize=man->free[i].size;
        j=i;
    }
}
if(j==-1){// Í׵ᤵ¤ì¤¿ÅÛ¤¬¼Â¤Ï°ìÈÖ¾®¤µ¤¤ÅÛ¤À¤Ã¤¿
    lostaddr=addr;
    man->losts++;
    man->lostsize+=lostsize;
}else{
    lostaddr=man->free[j].addr;
    // ºÇ¤â¾®¤µ¤Ê¶õ¤­Îΰè¤ò°®¤ê¤Ä¤Ö¤¹
    for (i=j;i<MEMMAN_FREES-1;i++) {
        man->free[i]=man->free[i+1];
    }
    man->frees--;
    man->losts++;
    man->lostsize+=lostsize;
    // ºÇ¤â¾®¤µ¤Ê¶õ¤­Îΰè¤òÄÙ¤·¤¿Ê¬¡¢´ÉÍýÎΰ褬¶õ¤¤¤¿¤Î¤Çfree²Äǽ¤ÎȦ
    memman_free(man,addr,size);
}


¤µ¤Æ¡¢½ñ¤¯¤¾¡¼(memman_free¤ÎºÇ¸å¤Ë¡¢¤µ¤é¤ËÄɵ­)

// ¤¢¤È¤Ç¥á¥â¥ê¤òÉü³è¤Ç¤­¤ë¤è¤¦¤ËºÙ¹©
struct MEMLIST *t;
if(man->list==LIST_END){// ¥ê¥¹¥È¤¬¶õ¤Ê¤é¡¢¤¿¤ÀÄɲ乤ë
    man->list=(struct MEMLIST *)lostaddr;// ï¤â»È¤ï¤Ê¤¤Îΰè¤ÎÀèÆ¬Éôʬ
    man->list->size=lostsize;
    man->list->next=LIST_END;
}else{// ÊÒÊý¸þ¥ê¥¹¥È¤ÎÀèÆ¬¤ËÁÞÆþ¤¹¤ë
    t=(struct MEMLIST *)lostaddr;// ï¤â»È¤ï¤Ê¤¤Îΰè¤ÎÀèÆ¬Éôʬ
    t->size=lostsize;
    t->next=man->list;
    man->list=t;
}


¿ʬ¤³¤ì¤Çư¤¯¤À¤í¤¦¡£Æ°¤¤¤Æ¤¯¤ì¤è¡¢Íê¤à¤«¤é¡£

¥á¥â¥ê¤òÉü³è¤µ¤»¤ë´Ø¿ô¤Ï¡¢¤È¤ê¤¢¤¨¤º¥¹¥±¥ë¥È¥ó¤À¤±½ñ¤¤¤Æ¤ß¤Þ¤¹¡£

void memman_GarbageCollection(struct MEMMAN *man){
    if(/* Éü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤Ê¤¤¤Ê¤é¤Ð */){
        return;
    }
    // ²òÊü¤·¤¿»þ¶õ¤­Îΰè¤òÄÙ¤µ¤Ê¤¤¤Ê¤é¡¢²òÊü¤·¤Æ¤¤¤¯(¤³¤Î´Ø¿ô¤Î¼Â¹ÔÃæ¤Ëman->list¤ÎÃæ¿È¤¬ÊѤï¤ë¤È¤ä¤ä¤³¤·¤¤¤Î¤Ç¡£)
    while(-1){
        if(/* ¥á¥â¥ê´ÉÍýÎΰè¤Ë;͵¤¬¤¢¤ê¡¢¤«¤ÄÉü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤¢¤ë¤Ê¤é¤Ð */){
            /* ¤½¤ì¤ò²òÊü */
        }
        if(/* ¤â¤·Éü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤Ã¤¿¤Ê¤é¤Ð */) break;
        // ¤³¤Î»þÅÀ¤Ç¥á¥â¥ê´ÉÍýÎΰè¤Ë;͵¤Ï¤Ê¤¤¤Ï¤º
        if(/* Á°¸å¤É¤Á¤é¤«¤Ç¤Þ¤È¤á¤ë»ö¤¬¤Ç¤­¤ë¤â¤Î¤¬¤¢¤ë¤Ê¤é¤Ð */){
            /* ¤½¤ì¤ò²òÊü */
        }
        // Á°¸å¤É¤Á¤é¤«¤Ç¤Þ¤È¤á¤ë»ö¤¬¤Ç¤­¤¿»þ¡¢¥á¥â¥ê´ÉÍýÎΰè¤Ë¾¯¤·Í¾Íµ¤¬À¸¤Þ¤ì¤ë¤«¤â¤·¤ì¤Ê¤¤¡£
        if(/* ¥á¥â¥ê´ÉÍýÎΰè¤Ë;͵¤¬¤¢¤ê¡¢¤«¤ÄÉü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤Þ¤À¤¢¤ë¤Ê¤é¤Ð */){
            continue;//¤â¤¦°ì¼þ¡£
        }else{
            break;//¤â¤¦²¿¤â½ÐÍè¤ë»ö¤¬¤Ê¤¤
        }
    }
    return;
}


¤¦¡Á¤ó¡¦¡¦¡¦¡¢¥á¥â¥ê´ÉÍýÎΰè¤Ë;͵¤¬¤¢¤ë¤«¤Ï¤¹¤°Ä´¤Ù¤é¤ì¤ë¤·¡¢Éü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤¢¤ë¤«¤É¤¦¤«¤â¤½¤¦¤Ê¤ó¤À¤±¤É
Á°¸å¤É¤Á¤é¤«¤Ç¤Þ¤È¤á¤ë»ö¤¬¤Ç¤­¤ë¤â¤Î¤¬¤¢¤ë¤«¤É¤¦¤«¤Ê¤ó¤Æ1¹Ô¤¸¤ãÆñ¤·¤¤¤è¤Ê¤¡¡¦¡¦¡¦¡£
¤·¤«¤â¤½¤Î¤¢¤È¡Ö¤½¤ì¡×¤ò²òÊü¤ÈÍè¤Æ¤ë¡£¤³¤ì¤Ï¥ë¡¼¥×¤È´Ø¿ô¤Ç¤Ê¤ó¤È¤«¤¹¤ë¤«¡¦¡¦¡¦¡£

¤µ¤Æ¼ÂÁõ

¤³¤ó¤Ê´¶¤¸¤«¤Ê¡£

void memman_GarbageCollection(struct MEMMAN *man){
    struct MEMLIST *t,*k;
    if((int)man->list==LIST_END){//Éü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤Ê¤¤
        return;
    }
    // ²òÊü¤·¤¿»þ¶õ¤­Îΰè¤òÄÙ¤µ¤Ê¤¤¤Ê¤é¡¢²òÊü¤·¤Æ¤¤¤¯(¤³¤Î´Ø¿ô¤Î¼Â¹ÔÃæ¤Ëman->list¤ÎÃæ¿È¤¬ÊѤï¤ë¤È¤ä¤ä¤³¤·¤¤¤Î¤Ç¡£)
    while(-1){
        // ¥á¥â¥ê´ÉÍýÎΰè¤Ë;͵¤¬¤¢¤ê¡¢¤«¤ÄÉü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤¢¤ë¤Ê¤é¤Ð½ç¼¡²òÊü
        while(man->frees<MEMMAN_FREES&&(int)man->list!=LIST_END){
            t=man->list;
            man->list=t->next;// ²òÊü²Äǽ¤Ê¸ºß¤ò¥ê¥¹¥È¤«¤éºï½ü
            memman_free(man,t,t->size);
        }
        // Éü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤Ê¤¯¤Ê¤Ã¤¿¤é¥ë¡¼¥×¤òÈ´¤±¤ë
        if((int)man->list==LIST_END) break;
        // ¥á¥â¥ê´ÉÍýÎΰè¤Ë;͵¤¬¤Ê¤¯¤Æ¤â¡¢Á°¸å¤É¤Á¤é¤«¤Ç¤Þ¤È¤á¤ë»ö¤¬½ÐÍè¤ë¤Ê¤é¤½¤ì¤ò²òÊü
        while((int)man->list!=LIST_END){// ÀèÆ¬¤ÏÆÃḚ̂·¤¤
            t=man->list;
            if(memman_canfree(man,t,t->size)){// ¤Þ¤È¤á¤é¤ì¤ë¤è¤¦¤Ê¾õÂ֤ʤé
                man->list=t->next;// ²òÊü²Äǽ¤Ê¸ºß¤ò¥ê¥¹¥È¤«¤éºï½ü
                memman_free(man,t,t->size);
            }else{
                break;
            }
        }
        k=man->list;
        while((int)k->next!=LIST_END){
            t=k->next;
            if(memman_canfree(man,t,t->size)){// ¤Þ¤È¤á¤é¤ì¤ë¤è¤¦¤Ê¾õÂ֤ʤé
                k->next=t->next;// ²òÊü²Äǽ¤Ê¸ºß¤ò¥ê¥¹¥È¤«¤éºï½ü
                memman_free(man,t,t->size);
            }else{
                k=k->next;
            }
        }
        // ¤Þ¤È¤á¤ë»ö¤Ë¤è¤Ã¤Æ¥á¥â¥ê´ÉÍýÎΰè¤Ë;͵¤¬½ÐÍè¤Æ¡¢¤«¤ÄÉü³è¤µ¤»¤ë¤Ù¤­¤â¤Î¤¬¤Þ¤À¸ºß¤¹¤ë¤Ê¤é¤â¤¦1¼þ
        if(man->frees<MEMMAN_FREES&&(int)man->list!=LIST_END){
            continue;// ¤â¤¦°ì¼þ¡£
        }else{
            break;// ¤â¤¦²¿¤â½ÐÍè¤ë»ö¤¬¤Ê¤¤
        }
    }
    return;
}

int memman_canfree(struct MEMMAN *man,void* addr,unsigned int size){// ´û¸¤Î¶õ´Ö¤È¤Þ¤È¤á¤ë»ö¤¬¤Ç¤­¤ë¤«¤É¤¦¤«¤òȽÄê
    int i;
    for(i=0;i<man->frees;i++){
        if(man->free[i].addr>addr){
            break;
        }
    }
    if(i>0&&man->free[i-1].addr+man->free[i-1].size==addr) return -1;// Á°¤È¤Þ¤È¤á¤é¤ì¤ë
    if(i<man->frees&&addr+size==man->free[i].addr) return -1;// ¸å¤í¤È¤Þ¤È¤á¤é¤ì¤ë
    return 0;
}


˺¤ì¤Ê¤¤¤¦¤Á¤Ëmemman_alloc¤Ç8byteñ°Ì¤ËÀÚ¤ê¾å¤²¤ë½èÍý¤ò½ñ¤­²Ã¤¨¤Æ¤ª¤³¤¦¡£
Ê̤Ë16Byte¤À¤í¤¦¤¬4KiB¤À¤í¤¦¤¬8Byte°Ê¾å¤Ê¤éÌäÂê¤Ê¤¤¤ó¤À¤±¤É¡¢¡Ö¥á¥â¥ê¤¬¤â¤Ã¤¿¤¤¤Ê¤¤¡×¤«¤é½Ðȯ¤·¤¿²þ¤¤Ç
¥á¥â¥ê¤ò¸«¼Î¤Æ¤ë¤è¤¦¤Ê¿¿»÷¤Ï¤·¤Á¤ã¤¤¤±¤Ê¤¤¤È»×¤¦¤ó¤À¡£

int memman_alloc(struct MEMMAN *man,unsigned int size){
    unsigned int i, a;
    // ¥µ¥¤¥º¤ò8byteñ°Ì¤ËÀÚ¤ê¾å¤²
    size=(size+(8-1))&(-8);
/* (¾Êά) */
    return 0; // ¤¢¤­¤¬¤Ê¤¤
}


Ãí°Õ»ö¹à(·ü°Æ»ö¹à)

­¡memman_free¤¹¤ë»þ¤Ë¡¢²¿¤â¹Í¤¨¤º¤Ë¥ê¥¹¥È¤ÎÀèÆ¬¤ËÆþ¤ì¤Æ¤¤¤Ã¤¿¤¿¤á¡¢Î㤨¤Ð¼¡¤Î¤è¤¦¤Ê¾ì¹ç¤Ë¤¦¤Þ¤¯Á´Éô²òÊü¤Ç¤­¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£

»ÈÍÑÃæ¤ò¡ß¡¢Ì¤»ÈÍѤò¡û¡¢¤½¤·¤Æ²òÊü¥ß¥¹¤·¤¿¤â¤Î¤ò¢¤¤È¤·¤Æ
¡¦¡¦¡¦¡ß¢¤¢¤¡û¡ß¡¦¡¦¡¦¤Èʤó¤Ç¤¤¤Æ¡¢´ÉÍýÎΰ褬Ëþ¥¿¥ó¤Ç¡¢º¸¤Î¢¤¤¬Àè¤ËȽÄꤵ¤ì¤¿»þ¡£

¤³¤¤¤Ä¤ò¤¦¤Þ¤¯¤ä¤ë¤Ë¤Ï¢¤Æ±»Î¤¬Ê¤ó¤Ç¤¤¤ë»þ¤Ë¤Þ¤È¤á¤ëɬÍפ¬¤¢¤Ã¤Æ¡¢
¤¹¤ë¤È¤ª¤Ê¤¸¤ß¤ÎÁÞÆþ¥½¡¼¥È¤¬´é¤ò½Ð¤·¤Þ¤¹¡£
¤È¤¤¤¦¤³¤È¤Ç»ä¤â½ñ¤¤¤Æ¤ß¤¿¤Î¤Ç¤¹¤¬¡¢¤É¤¦¤Ë¤âŤ¤¤·¤Ñ¤Ã¤È¸«°ÕÌ£ÉÔÌÀ¤Ê¤Î¤Ç¡¢¡Ö³§¤µ¤ó¤Ø¤Î½ÉÂê¡×¤È¸À¤¦¤³¤È¤Ç¤¤¤¤¤Ç¤·¤ç¤¦¤«¡©
¤Þ¤¿¡¢¤¢¤ë¹½Â¤ÂΤˤ⤦¤¹¤³¤·¼ê¤ò²Ã¤¨¤ë»ö¤Ç¡¢memman_GarbageCollection´Ø¿ôÆâÅù¤Î¡ÖÀèÆ¬Éôʬ¤ÏÆÃḚ̂·¤¤¡×¤È¤¤¤¦¾õ¶·¤ò²þÁ±¤Ç¤­¤Þ¤¹¡£
¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£

­¢Â¿Ê¬¤³¤ì¤ÏºÇÎɤÎÊýË¡¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£É¬¤º¥í¥¸¥Ã¥¯¥ì¥Ù¥ë¤Ç¤â¤Ã¤È¤¤¤¤¤â¤Î¤¬¤¢¤ë¤Ï¤º¤Ç¤¹¡£
»ä¤Ïº£¤Î¤È¤³¤í»×¤¤¤Ä¤­¤Þ¤»¤ó¤¬¡¢³§¤µ¤ó¤â¤¢¤ì¤³¤ì¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¤Ç¤­¤ì¤Ð¤½¤ÎÊýË¡¤ò¥³¡¼¥É¤Ëµ¯¤³¤¹¤Ê¤ê¾¿Í¤ËÀâÌÀ¤Ç¤­¤ëÄøÅ٤˾ܤ·¤¯³°Éô»ÅÍͤò»æ¤Ë½ñ¤­½Ð¤¹¤Ê¤ê¤·¤Æ¤¯¤À¤µ¤¤¡£
»ä¤Ï¤½¤ÎÊýË¡¤ò¸«¤Æ¤ß¤¿¤¤¤Ç¤¹¡£

­£°ì±þ³Îǧ¤Ï¤·¤Æ¤ë¤Î¤Ç¤¹¤¬¡¢¤¢¤Þ¤êƬ¤Î¤è¤¯¤Ê¤¤»ä¤¬½ñ¤¤¤¿¥³¡¼¥É¤Ë¥Ð¥°¤¬¤Ê¤¤¤È¤Ï¹Í¤¨¤é¤ì¤Þ¤»¤ó¡£
¥³¡¼¥É¤ò¥³¥Ô¥Ú¤¹¤ëÁ°¤Ë¡Ö²¿¤¬¤·¤¿¤¯¤Æ¡¢¤É¤¦¤¹¤ì¤Ð¼ÂÁõ¤Ç¤­¤½¤¦¤«¡×¤òÍý²ò¤·¤Æ¡¢°ì±þ¥³¡¼¥É¤òÌܤÇÄɤäƤߤƤ¯¤À¤µ¤¤¡£

­¤¤Ä¤¤¤Ç¤Ë¸À¤¦¤È¸½¾õ¤Î»ä¤Îºî¤Ã¤Æ¤ëOS¤È¤Ï¤¢¤Á¤³¤Á¤Ç¥³¡¼¥É¤¬°ã¤¦¤Î¤Ç¡¢¥³¥ó¥Ñ¥¤¥ë¤¹¤é»î¤·¤Æ¤Þ¤»¤ó¡£¤¹¤ß¤Þ¤»¤ó¡£
Î㤨¤Ðmemman_freeÅù¤ÏÁ´ÉôMEMMAN¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤ò°ú¿ô¤Ë¼è¤é¤Ê¤¤¤Ç¡¢³Æ´Ø¿ôÆâ¤ÇľÀÜ»²¾È¤·¤Ë¹Ô¤Ã¤Æ¤Þ¤¹¤·¡¢
MEMLIST¹½Â¤ÂΤÎ̾Á°¤¬MEMCONS¹½Â¤ÂΤˤʤäƤ¿¤ê¡¢¤½¤Î¥á¥ó¥Ð¤Înext¤Î̾Á°¤âcdr¤Ë¤Ê¤Ã¤Æ¤¿¤ê¤·¤Þ¤¹¡£
¤³¤ì¤Ï¼«Ê¬¤Ë¤È¤Ã¤ÆÆÉ¤ß¤ä¤¹¤¯½ñ¤¯¤¿¤á¤À¤Ã¤¿¤ê¤¹¤ë¤Î¤Ç¤¹¤¬¡¢¤ª¤½¤é¤¯¡Öcdr´Ø¿ô¡×¤È¤¤¤¦Êª¤ò¤è¤¯»È¤¦Ë¿¸À¸ì¤ò
»È¤Ã¤Æ¤ë¿Í¤Ï¼ç¤ËC¸À¸ì¤Ç½ñ¤¤¤Æ¤ë¿Í¤¿¤Á¤ÎÃæ¤Ë¤Ï¤¢¤Þ¤êµï¤Ê¤¤¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¡¢
½ñ¤­´¹¤¨¤Ê¤¬¤é·ÇºÜÍѤ˰ܿ¢¤·¤Þ¤·¤¿¡£¤È¤¤¤¦¸À¤¤Ìõ¤ò¸À¤Ã¤Æ¤ª¤­¤Þ¤¹¡£

´Ê°×Åêɼ(º£²ó¤Î¥á¥â¥ê´ÉÍý¤Ë´Ø¤¹¤ëµ­»ö¤Ë¤Ä¤¤¤Æ¡£)

¤É¤ÎÄøÅÙÌò¤ËΩ¤Ã¤¿¡©

ÁªÂò»è Åêɼ
Á´¤¯¡£Á´Á³¡£ 1  
¤Û¤ó¤Î¤ï¤º¤«¤Ë¡£¤¢¤Þ¤ê¡£ 2  
¤ä¤ä¡¢¾¯¤·¡£ 3  
¤Þ¤¡¤Þ¤¡¡¢³ä¤È¡£ 1  
¤«¤Ê¤ê¡¢¤È¤Æ¤â 1  
Èó¾ï¤Ë¡¢À¨¤¯ 3  

ÀâÌÀ¤ÏŬÀÚ¡©

ÁªÂò»è Åêɼ
ÀâÌÀ²á¾ê 0  
¤ä¤ä²á¾ê 0  
ŬÀÚ 1  
¤ä¤äÉÔŬÀÚ 0  
ʬ¤«¤ê¤Ë¤¯¤¤ 0  
Á´¤¯Ê¬¤«¤é¤Ê¤¤ 0  

¥½¡¼¥¹¥³¡¼¥ÉÃæ¤Î¥³¥á¥ó¥È¤Ï¡©

ÁªÂò»è Åêɼ
¿¤¹¤®¤ë 0  
¤ä¤ä¿¤¤ 0  
¤ä¤ä¿¤¤¤¬Å¬ÀÚ 1  
ŬÀÚ¤ÇŬÎÌ 0  
¤ä¤ä¾¯¤Ê¤¤¤¬Å¬ÀÚ 0  
¤ä¤ä¾¯¤Ê¤¤ 0  
¾¯¤Ê¤¹¤®¤ë 0  

¤¢¤Î¡Öcdr´Ø¿ô¡×¤ò¤è¤¯»È¤¦¡¢³ç¸ÌÃϹö¤È¤â¸À¤ï¤ì¤ëË¿¸À¸ì¤Ë¤Ä¤¤¤Æ²¿¤«ÃΤäƤ롩

ÁªÂò»è Åêɼ
¤¤¤¤¤¨ 1  
¤Ï¤¤¡Êº£¡¢¤¢¤ë¤¤¤ÏºÇ¶áÄ´¤Ù¤¿¡Ë 1  
¤Ï¤¤¡Ê¾¯¤·¤«¤½¤ì°Ê¾åÁ°¤«¤éÃΤäƤ¤¤ë¡Ë 2  

¥³¥á¥ó¥È


¥³¥á¥ó¥È¤ªÌ¾Á°NameLink

¥ê¥í¡¼¥É   ¿·µ¬ ÊÔ½¸ º¹Ê¬ źÉÕ   ¥È¥Ã¥× °ìÍ÷ ¸¡º÷ ºÇ½ª¹¹¿· ¥Ð¥Ã¥¯¥¢¥Ã¥×   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS
Last-modified: 2011-07-14 (ÌÚ) 17:48:15 (5384d)