**¥á¥â¥ê´ÉÍý(¤³¤Îµ»ö¤Ï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¸À¸ì¤Ç½ñ¤¤¤Æ¤ë¿Í¤¿¤Á¤ÎÃæ¤Ë¤Ï¤¢¤Þ¤êµï¤Ê¤¤¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤¤¡¢~ ½ñ¤´¹¤¨¤Ê¤¬¤é·ÇºÜÍѤ˰ܿ¢¤·¤Þ¤·¤¿¡£¤È¤¤¤¦¸À¤¤Ìõ¤ò¸À¤Ã¤Æ¤ª¤¤Þ¤¹¡£ ***´Ê°×Åêɼ(º£²ó¤Î¥á¥â¥ê´ÉÍý¤Ë´Ø¤¹¤ëµ»ö¤Ë¤Ä¤¤¤Æ¡£) ¤É¤ÎÄøÅÙÌò¤ËΩ¤Ã¤¿¡© #vote(Á´¤¯¡£Á´Á³¡£[1],¤Û¤ó¤Î¤ï¤º¤«¤Ë¡£¤¢¤Þ¤ê¡£[2],¤ä¤ä¡¢¾¯¤·¡£[3],¤Þ¤¡¤Þ¤¡¡¢³ä¤È¡£[1],¤«¤Ê¤ê¡¢¤È¤Æ¤â[1],Èó¾ï¤Ë¡¢À¨¤¯[3]) ÀâÌÀ¤ÏŬÀÚ¡© #vote(ÀâÌÀ²á¾ê,¤ä¤ä²á¾ê,ŬÀÚ,¤ä¤äÉÔŬÀÚ,ʬ¤«¤ê¤Ë¤¯¤¤,Á´¤¯Ê¬¤«¤é¤Ê¤¤) #vote(ÀâÌÀ²á¾ê[0],¤ä¤ä²á¾ê[0],ŬÀÚ[1],¤ä¤äÉÔŬÀÚ[0],ʬ¤«¤ê¤Ë¤¯¤¤[0],Á´¤¯Ê¬¤«¤é¤Ê¤¤[0]) ¥½¡¼¥¹¥³¡¼¥ÉÃæ¤Î¥³¥á¥ó¥È¤Ï¡© #vote(¿¤¹¤®¤ë[0],¤ä¤ä¿¤¤[0],¤ä¤ä¿¤¤¤¬Å¬ÀÚ[1],ŬÀÚ¤ÇŬÎÌ[0],¤ä¤ä¾¯¤Ê¤¤¤¬Å¬ÀÚ[0],¤ä¤ä¾¯¤Ê¤¤[0],¾¯¤Ê¤¹¤®¤ë[0]) ¤¢¤Î¡Öcdr´Ø¿ô¡×¤ò¤è¤¯»È¤¦¡¢³ç¸ÌÃϹö¤È¤â¸À¤ï¤ì¤ëË¿¸À¸ì¤Ë¤Ä¤¤¤Æ²¿¤«ÃΤäƤ롩 #vote(¤¤¤¤¤¨[1],¤Ï¤¤¡Êº£¡¢¤¢¤ë¤¤¤ÏºÇ¶áÄ´¤Ù¤¿¡Ë[1],¤Ï¤¤¡Ê¾¯¤·¤«¤½¤ì°Ê¾åÁ°¤«¤éÃΤäƤ¤¤ë¡Ë[2]) ***¥³¥á¥ó¥È #comment