Next: , Previous: Pure Storage, Up: GNU Emacs Internals   [Contents][Index]


B.3 ¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó

¥×¥í¥°¥é¥à¤¬¥ê¥¹¥È¤òºîÀ®¤·¤¿¤ê¡¢¡Ê¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤¹¤ë¤Ê¤É¤·¤Æ¡Ë ¥æ¡¼¥¶¡¼¤¬¿·¤¿¤Ë´Ø¿ô¤òÄêµÁ¤¹¤ë¤È¡¢ ¤½¤ì¤é¤Î¥Ç¡¼¥¿¤ÏÉáÄÌ¥á¥â¥ê¤ØÃÖ¤«¤ì¤Þ¤¹¡£ ÉáÄÌ¥á¥â¥ê¤¬Â­¤ê¤Ê¤¯¤Ê¤ë¤È¡¢Emacs¤Ï¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ë 1k¥Ð¥¤¥È¤ÎÇÜ¿ô¤Î¥Ö¥í¥Ã¥¯¤Ç¥á¥â¥ê³ä¤êÅö¤Æ¤òÍ׵ᤷ¤Þ¤¹¡£ ³Æ¥Ö¥í¥Ã¥¯¤Ï1¤Ä¤Î¼ïÎà¤ÎLisp¥ª¥Ö¥¸¥§¥¯¥È¤Ë»È¤¤¤Þ¤¹¤«¤é¡¢ ¥·¥ó¥Ü¥ë¡¢¥³¥ó¥¹¥»¥ë¡¢¥Þ¡¼¥«¤Ê¤É¤Ï¥á¥â¥ê¤Î°Û¤Ê¤ë¥Ö¥í¥Ã¥¯¤ËʬΥ¤µ¤ì¤Þ¤¹¡£ ¡Ê¥Ù¥¯¥È¥ë¡¢Ä¹¤¤Ê¸»úÎ󡢥Хåե¡¡¢ÆÃÄê¤ÎÊÔ½¸¸þ¤±¥Ç¡¼¥¿·¿¤Ê¤É¤Î Èæ³ÓŪÂ礭¤Ê¤â¤Î¤Ï³Æ¥ª¥Ö¥¸¥§¥¯¥È¤´¤È¤ËÆÈΩ¤Î¥Ö¥í¥Ã¥¯¤ò³ä¤êÅö¤Æ¤ë¤¬¡¢ û¤¤Ê¸»úÎó¤Ï8k¥Ð¥¤¥È¤Î¥Ö¥í¥Ã¥¯¤ËµÍ¤á¹þ¤à¡£¡Ë

¤¢¤ë¥á¥â¥êÉôʬ¤ò¤·¤Ð¤é¤¯»È¤Ã¤Æ¤«¤é¡¢ ¡Ê¤¿¤È¤¨¤Ð¡Ë¥Ð¥Ã¥Õ¥¡¤òºï½ü¤·¤¿¤ê ¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ¹¤ëºÇ¸å¤Î»²¾È¤òºï½ü¤¹¤ë¤Ê¤É¤·¤Æ Åö³º¥á¥â¥ê¤ò²òÊü¤¹¤ë¤³¤È¤Ï¤è¤¯¤¢¤ë¤³¤È¤Ç¤¹¡£ Emacs¤Ë¤Ï¡¢¤³¤Î¤è¤¦¤ÊÊüÃÖ¤µ¤ì¤¿¥á¥â¥ê¤ò²ó¼ý¤¹¤ë ¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¡Êgarbage collector¡Ë¤¬¤¢¤ê¤Þ¤¹¡£ ¡Ê¤³¤Î̾Á°¤ÏÅÁÅýŪ¤À¤¬¡¢ ¡Ø¥¬¥Ù¥Ã¥¸¥ê¥µ¥¤¥¯¥ë¡Ù¤Î¤Û¤¦¤¬¤³¤Îµ¡Ç½¤òľ´ÑŪ¤Ëɽ¤¹¤«¤â¤·¤ì¤Ê¤¤¡£¡Ë

¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤Ï¡¢Lisp¥×¥í¥°¥é¥à¤«¤é¸½»þÅÀ¤Ç»²¾È²Äǽ¤Ê ¤¹¤Ù¤Æ¤ÎLisp¥ª¥Ö¥¸¥§¥¯¥È¤òõ¤·¤Æ°õ¤òÉÕ¤±¤ë¤³¤È¤Çưºî¤·¤Þ¤¹¡£ ¤Þ¤º¡¢¤¹¤Ù¤Æ¤Î¥·¥ó¥Ü¥ë¡¢¤½¤ì¤é¤ÎÃÍ¡¢¤½¤ì¤é¤Ë´ØÏ¢ÉÕ¤±¤é¤ì¤¿´Ø¿ôÄêµÁ¡¢ ¤ª¤è¤Ó¡¢¥¹¥¿¥Ã¥¯¾å¤ÎǤ°Õ¤Î¥Ç¡¼¥¿¤Ï»²¾È²Äǽ¤Ç¤¢¤ë¤È²¾Äꤷ¤Þ¤¹¡£ »²¾È²Äǽ¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤«¤é´ÖÀÜŪ¤Ëé¤ì¤ëǤ°Õ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤â »²¾È²Äǽ¤Ç¤¹¡£

°õÉÕ¤±¤¬½ª¤Ã¤¿¤È¤­¤Ë¤Ï¡¢Ìµ°õ¤Ç¤¢¤ë¤¹¤Ù¤Æ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï ¥´¥ß¡Ê¥¬¥Ù¥Ã¥¸¡Ë¤Ç¤¹¡£ Lisp¥×¥í¥°¥é¥à¤ä¥æ¡¼¥¶¡¼¤¬¤Ê¤Ë¤ò¤·¤è¤¦¤È¡¢ ̵°õ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ëé¤êÃ夯ÊýË¡¤Ï¤Ê¤¤¤Î¤Ç¤½¤ì¤é¤ò»²¾È¤¹¤ë¤³¤È¤ÏÉÔ²Äǽ¤Ç¤¹¡£ ̵°õ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò»È¤Ã¤Æ¤¤¤ë¤â¤Î¤Ï¤¤¤Ê¤¤¤Î¤Ç¡¢ ¤½¤ì¤é¤Î¥á¥â¥êÎΰè¤ÏºÆÍøÍѤǤ­¤Þ¤¹¡£ ¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤Î2ÃÊÌÜ¤ÎÆ°ºî¡Ê¡ØÁݤ¯¡Ù¡Êsweep¡Ë¡Ë¤Ï¡¢ ̵°õ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¥á¥â¥êÎΰè¤òºÆÍøÍѤǤ­¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¤¹¡£

Áݤ­ºî¶È¤Ç¤Ï¡¢Ì¤»ÈÍѤΥ³¥ó¥¹¥»¥ë¤ò¼«Í³¥ê¥¹¥È¡Êfree list¡Ë¤ËÆþ¤ì¤Æ¡¢ ¾­Íè¤Î³ä¤êÅö¤Æ¤ËÈ÷¤¨¤Þ¤¹¡£ ¥·¥ó¥Ü¥ë¤ä¥Þ¡¼¥«¤Ë¤Ä¤¤¤Æ¤âƱÍͤǤ¹¡£ »²¾È²Äǽ¤Êʸ»úÎó¤Ï8k¥Ð¥¤¥È¤Î¥Ö¥í¥Ã¥¯¤è¤ê¾®¤µ¤ÊÎΰè¤òÀê¤á¤ë¤è¤¦¤ËµÍ¤á¹þ¤ß¡¢ ÉÔÍפˤʤä¿8k¥Ð¥¤¥È¤Î¥Ö¥í¥Ã¥¯¤Ï²òÊü¤·¤Þ¤¹¡£ ¥Ù¥¯¥È¥ë¡¢¥Ð¥Ã¥Õ¥¡¡¢¥¦¥£¥ó¥É¥¦¡¢Â¾¤ÎÂ礭¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Ï¡¢ malloc¤äfree¤ò»È¤Ã¤Æ¸ÄÊ̤˳ä¤êÅö¤Æ¤¿¤ê²òÊü¤·¤Þ¤¹¡£

Common Lisp¤Ë´Ø¤·¤¿Ãí°Õ¡§ ¾¤ÎLisp¤È°Û¤Ê¤ê¡¢GNU Emacs Lisp¤Ç¤Ï¡¢ ¼«Í³¥ê¥¹¥È¤¬¶õ¤Ë¤Ê¤Ã¤Æ¤â¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤ò¸Æ¤Ó½Ð¤µ¤Ê¤¤¡£ ¤½¤Î¤«¤ï¤ê¤Ë¡¢¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ë¥á¥â¥ê³ä¤êÅö¤Æ¤òñ½ã¤ËÍ׵ᤷ¡¢ gc-cons-threshold¥Ð¥¤¥È¤ò»È¤¤¿Ô¤¯¤¹¤Þ¤Ç¤Ï½èÍý¤ò·Ñ³¤¹¤ë¡£

¤Ä¤Þ¤ê¡¢¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤òÌÀ¼¨Åª¤Ë¸Æ¤Ó½Ð¤·¤¿Ä¾¸å¤ÎLisp¥×¥í¥°¥é¥à¤ÎÉôʬ¤Ç¤Ï¡¢ ¡Ê¥×¥í¥°¥é¥à¤Î¤½¤ÎÉôʬ¤Ç2ÅÙÌܤ˥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤ò¸Æ¤Ó½Ð¤¹¤Û¤É ¿¤¯¤Î¥á¥â¥ê¤ò»È¤ï¤Ê¤¤¤È²¾Äꤹ¤ì¤Ð¡Ë ¤½¤ÎÉôʬ¤ò¼Â¹ÔÃæ¤Ë¤Ï¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤¬¸Æ¤Ð¤ì¤Ê¤¤¤³¤È¤òÊݾڤǤ­¤ë¤Î¤Ç¤¢¤ë¡£

¥³¥Þ¥ó¥É: garbage-collect

¤³¤Î¥³¥Þ¥ó¥É¤Ï¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤ò¼Â¹Ô¤·¡¢ »ÈÍÑÃæ¤Î¥á¥â¥êÎ̤˴ؤ¹¤ë¾ðÊó¤òÊÖ¤¹¡£ ¡Ê¤Þ¤¨¤Î¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤Îµ¯Æ°¸å¤Ë gc-cons-threshold¥Ð¥¤¥È°Ê¾å¤ÎLisp¥Ç¡¼¥¿¤ò»È¤¦¤È ¼«È¯Åª¤Ê¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤Îµ¯Æ°¤ò°ú¤­µ¯¤³¤¹¡£¡Ë

garbage-collect¤¬ÊÖ¤¹¥ê¥¹¥È¤Ë¤Ï¤Ä¤®¤Î¾ðÊ󤬴ޤޤì¤ë¡£

((used-conses . free-conses)
 (used-syms . free-syms)
 (used-miscs . free-miscs)
 used-string-chars 
 used-vector-slots
 (used-floats . free-floats)
 (used-intervals . free-intervals))

Îã¤ò¼¨¤¹¡£

(garbage-collect)
     ⇒ ((106886 . 13184) (9769 . 0)
                (7731 . 4651) 347543 121628
                (31 . 94) (1273 . 168))

³ÆÍ×ÁǤΰÕÌ£¤Ï¤Ä¤®¤Î¤È¤ª¤ê¤Ç¤¢¤ë¡£

used-conses

»ÈÍÑÃæ¤Î¥³¥ó¥¹¥»¥ë¤Î¸Ä¿ô¡£

free-conses

¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʥ³¥ó¥¹¥»¥ë¤Î¸Ä¿ô¡£

used-syms

»ÈÍÑÃæ¤Î¥·¥ó¥Ü¥ë¤Î¸Ä¿ô¡£

free-syms

¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʥ·¥ó¥Ü¥ë¤Î¸Ä¿ô¡£

used-miscs

¤½¤Î¾¤Î»ÈÍÑÃæ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¸Ä¿ô¡£ ¥Þ¡¼¥«¡¢¥ª¡¼¥Ð¥ì¥¤¡¢¥æ¡¼¥¶¡¼¤Ë¸«¤¨¤Ê¤¤¤¢¤ë¼ï¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò´Þ¤à¡£

free-miscs

¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʤ½¤Î¾¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¸Ä¿ô¡£

used-string-chars

»ÈÍÑÃæ¤Îʸ»úÎó¤ÎÁíʸ»ú¿ô¡£

used-vector-slots

¸ºß¤¹¤ë¥Ù¥¯¥È¥ë¤ÎÍ×ÁǤÎÁí¸Ä¿ô¡£

used-floats

»ÈÍÑÃæ¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤Î¸Ä¿ô¡£

free-floats

¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤÊÉâÆ°¾®¿ôÅÀ¿ô¤Î¸Ä¿ô¡£

used-intervals

»ÈÍÑÃæ¤Î¥¤¥ó¥¿¡¼¥Ð¥ë¤Î¸Ä¿ô¡£ ¥¤¥ó¥¿¡¼¥Ð¥ë¤È¤Ï¥Æ¥­¥¹¥È°À­¤òɽ¸½¤¹¤ë¤¿¤á¤Ë»È¤¦ÆâÉô¥Ç¡¼¥¿¹½Â¤¤Ç¤¢¤ë¡£

free-intervals

¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʥ¤¥ó¥¿¡¼¥Ð¥ë¤Î¸Ä¿ô¡£

User Option: garbage-collection-messages

¤³¤ÎÊÑ¿ô¤¬nil°Ê³°¤Ç¤¢¤ë¤È¡¢ Emacs¤Ï¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Î»Ï¤Þ¤ê¤È½ª¤ê¤Ë¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£ ¥Ç¥Õ¥©¥ë¥ÈÃͤÏnil¤Ç¤¢¤ê¡¢¤½¤Î¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤¡£

User Option: gc-cons-threshold

¤³¤ÎÊÑ¿ô¤ÎÃͤϡ¢¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Î¤¢¤È¤Ç ¤Ä¤®¤Ë¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤òµ¯¤³¤¹¤Þ¤Ç¤Ë Lisp¥ª¥Ö¥¸¥§¥¯¥È¤Ë³ä¤êÅö¤Æ¤ë¤Ù¤­¥á¥â¥ê¥Ð¥¤¥È¿ô¤Ç¤¢¤ë¡£ ¥³¥ó¥¹¥»¥ë¤Ï8¥Ð¥¤¥È¡¢ ʸ»úÎó¤Ï1ʸ»ú1¥Ð¥¤¥È¤È¿ô¥Ð¥¤¥È¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤È¤¤¤Ã¤¿¶ñ¹ç¤Ç¤¢¤ë¡£ ¥Ð¥Ã¥Õ¥¡¤ÎÆâÍÆ¤Ë³ä¤êÅö¤Æ¤¿¥á¥â¥êÎ̤Ͽô¤¨¤Ê¤¤¡£ ¤³¤ÎïçÃͤò±Û¤¨¤Æ¤â¤¿¤À¤Á¤Ë¤Ä¤®¤Î¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Ïµ¯¤³¤é¤º¡¢ ¤Ä¤®¤ËLisp¤Î¥¨¥Ð¥ê¥å¥¨¡¼¥¿¤¬¸Æ¤Ð¤ì¤È¤­¤Ëµ¯¤­¤ë¡£

ºÇ½é¤ÎïçÃͤÏ400,000¤Ç¤¢¤ë¡£ ¤è¤êÂ礭¤ÊÃͤò»ØÄꤹ¤ë¤È¡¢¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Îµ¯Æ°²ó¿ô¤¬¾¯¤Ê¤¯¤Ê¤ë¡£ ¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤ËÈñ¤¹»þ´Ö¤ò¸º¾¯¤Ç¤­¤ë¤¬¡¢ Á´ÂΤΥá¥â¥ê»ÈÍÑÎ̤òÁý²Ã¤µ¤»¤ë¡£ ÂçÎ̤ÎLisp¥Ç¡¼¥¿¤òºîÀ®¤¹¤ë¤è¤¦¤Ê¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤È¤­¤ËÀßÄꤹ¤ë¡£

10,000¤Þ¤Ç¤Î¾®¤µ¤ÊÃͤò»ØÄꤹ¤ë¤È¡¢ ¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Î²ó¿ô¤òÁý¤ä¤»¤ë¡£ 10,000̤Ëþ¤ÎÃͤ¬°ÕÌ£¤ò»ý¤Ä¤Î¤Ï¤Ä¤®¤Ë¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤¬µ¯¤­¤ë¤Þ¤Ç¤Ç¤¢¤ë¡£ garbage-collect¤ÏïçÃͤò10,000¤ËÌ᤹¡£

garbage-collect¤¬ÊÖ¤¹Ãͤϡ¢¥Ç¡¼¥¿·¿¤´¤È¤ÎLisp¥Ç¡¼¥¿¤Î¥á¥â¥ê»ÈÍÑÎ̤Ǥ¹¡£ ÂоÈŪ¤Ë¡¢´Ø¿ômemory-limit¤Ï¡¢ Emacs¤¬¸½ºß»ÈÍÑÃæ¤Î¥á¥â¥êÁíÎ̤˴ؤ¹¤ë¾ðÊó¤òÍ¿¤¨¤Þ¤¹¡£

Function: memory-limit

¤³¤Î´Ø¿ô¤Ï¡¢Emacs¤¬ºÇ¸å¤Ë³ä¤êÅö¤Æ¤¿ºÇ½ª¥Ð¥¤¥È¤Î¥¢¥É¥ì¥¹¤ò 1024¤Ç³ä¤Ã¤¿¤â¤Î¤òÊÖ¤¹¡£ Ãͤò1024¤Ç³ä¤ë¤Î¤Ï¡¢Lisp¤ÎÀ°¿ô¤Ë¼ý¤á¤ë¤¿¤á¤Ç¤¢¤ë¡£

ÆÉ¼Ô¤ÎÁàºî¤¬¥á¥â¥ê»ÈÍÑÎ̤ˤɤΤ褦¤Ë±Æ¶Á¤¹¤ë¤«¤òÄ´¤Ù¤ë¤Î¤Ë»È¤¨¤ë¡£