**¥á¥â¥ê´ÉÍý(¤³¤Îµ»ö¤Ï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