Next: Memory Usage, Previous: Pure Storage, Up: GNU Emacs Internals [Contents][Index]
¥×¥í¥°¥é¥à¤¬¥ê¥¹¥È¤òºîÀ®¤·¤¿¤ê¡¢¡Ê¥é¥¤¥Ö¥é¥ê¤ò¥í¡¼¥É¤¹¤ë¤Ê¤É¤·¤Æ¡Ë ¥æ¡¼¥¶¡¼¤¬¿·¤¿¤Ë´Ø¿ô¤òÄêµÁ¤¹¤ë¤È¡¢ ¤½¤ì¤é¤Î¥Ç¡¼¥¿¤ÏÉáÄÌ¥á¥â¥ê¤ØÃÖ¤«¤ì¤Þ¤¹¡£ ÉáÄÌ¥á¥â¥ê¤¬Â¤ê¤Ê¤¯¤Ê¤ë¤È¡¢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ÅÙÌܤ˥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤ò¸Æ¤Ó½Ð¤¹¤Û¤É ¿¤¯¤Î¥á¥â¥ê¤ò»È¤ï¤Ê¤¤¤È²¾Äꤹ¤ì¤Ð¡Ë ¤½¤ÎÉôʬ¤ò¼Â¹ÔÃæ¤Ë¤Ï¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤¬¸Æ¤Ð¤ì¤Ê¤¤¤³¤È¤òÊݾڤǤ¤ë¤Î¤Ç¤¢¤ë¡£
¤³¤Î¥³¥Þ¥ó¥É¤Ï¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤ò¼Â¹Ô¤·¡¢
»ÈÍÑÃæ¤Î¥á¥â¥êÎ̤˴ؤ¹¤ë¾ðÊó¤òÊÖ¤¹¡£
¡Ê¤Þ¤¨¤Î¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥¿¤Îµ¯Æ°¸å¤Ë
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))
³ÆÍ×ÁǤΰÕÌ£¤Ï¤Ä¤®¤Î¤È¤ª¤ê¤Ç¤¢¤ë¡£
»ÈÍÑÃæ¤Î¥³¥ó¥¹¥»¥ë¤Î¸Ä¿ô¡£
¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʥ³¥ó¥¹¥»¥ë¤Î¸Ä¿ô¡£
»ÈÍÑÃæ¤Î¥·¥ó¥Ü¥ë¤Î¸Ä¿ô¡£
¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʥ·¥ó¥Ü¥ë¤Î¸Ä¿ô¡£
¤½¤Î¾¤Î»ÈÍÑÃæ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¸Ä¿ô¡£ ¥Þ¡¼¥«¡¢¥ª¡¼¥Ð¥ì¥¤¡¢¥æ¡¼¥¶¡¼¤Ë¸«¤¨¤Ê¤¤¤¢¤ë¼ï¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò´Þ¤à¡£
¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʤ½¤Î¾¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î¸Ä¿ô¡£
»ÈÍÑÃæ¤Îʸ»úÎó¤ÎÁíʸ»ú¿ô¡£
¸ºß¤¹¤ë¥Ù¥¯¥È¥ë¤ÎÍ×ÁǤÎÁí¸Ä¿ô¡£
»ÈÍÑÃæ¤ÎÉâÆ°¾®¿ôÅÀ¿ô¤Î¸Ä¿ô¡£
¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤÊÉâÆ°¾®¿ôÅÀ¿ô¤Î¸Ä¿ô¡£
»ÈÍÑÃæ¤Î¥¤¥ó¥¿¡¼¥Ð¥ë¤Î¸Ä¿ô¡£ ¥¤¥ó¥¿¡¼¥Ð¥ë¤È¤Ï¥Æ¥¥¹¥È°À¤òɽ¸½¤¹¤ë¤¿¤á¤Ë»È¤¦ÆâÉô¥Ç¡¼¥¿¹½Â¤¤Ç¤¢¤ë¡£
¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤«¤éÆÀ¤¿¥á¥â¥ê¤Ç¤¢¤ë¤¬ ¸½ºß̤»ÈÍѤʥ¤¥ó¥¿¡¼¥Ð¥ë¤Î¸Ä¿ô¡£
¤³¤ÎÊÑ¿ô¤¬nil
°Ê³°¤Ç¤¢¤ë¤È¡¢
Emacs¤Ï¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Î»Ï¤Þ¤ê¤È½ª¤ê¤Ë¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¡£
¥Ç¥Õ¥©¥ë¥ÈÃͤÏnil
¤Ç¤¢¤ê¡¢¤½¤Î¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Ê¤¤¡£
¤³¤ÎÊÑ¿ô¤ÎÃͤϡ¢¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Î¤¢¤È¤Ç ¤Ä¤®¤Ë¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤òµ¯¤³¤¹¤Þ¤Ç¤Ë Lisp¥ª¥Ö¥¸¥§¥¯¥È¤Ë³ä¤êÅö¤Æ¤ë¤Ù¤¥á¥â¥ê¥Ð¥¤¥È¿ô¤Ç¤¢¤ë¡£ ¥³¥ó¥¹¥»¥ë¤Ï8¥Ð¥¤¥È¡¢ ʸ»úÎó¤Ï1ʸ»ú1¥Ð¥¤¥È¤È¿ô¥Ð¥¤¥È¤Î¥ª¡¼¥Ð¥Ø¥Ã¥É¤È¤¤¤Ã¤¿¶ñ¹ç¤Ç¤¢¤ë¡£ ¥Ð¥Ã¥Õ¥¡¤ÎÆâÍÆ¤Ë³ä¤êÅö¤Æ¤¿¥á¥â¥êÎ̤Ͽô¤¨¤Ê¤¤¡£ ¤³¤ÎïçÃͤò±Û¤¨¤Æ¤â¤¿¤À¤Á¤Ë¤Ä¤®¤Î¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Ïµ¯¤³¤é¤º¡¢ ¤Ä¤®¤ËLisp¤Î¥¨¥Ð¥ê¥å¥¨¡¼¥¿¤¬¸Æ¤Ð¤ì¤È¤¤Ëµ¯¤¤ë¡£
ºÇ½é¤ÎïçÃͤÏ400,000¤Ç¤¢¤ë¡£ ¤è¤êÂ礤ÊÃͤò»ØÄꤹ¤ë¤È¡¢¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Îµ¯Æ°²ó¿ô¤¬¾¯¤Ê¤¯¤Ê¤ë¡£ ¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤ËÈñ¤¹»þ´Ö¤ò¸º¾¯¤Ç¤¤ë¤¬¡¢ Á´ÂΤΥá¥â¥ê»ÈÍÑÎ̤òÁý²Ã¤µ¤»¤ë¡£ ÂçÎ̤ÎLisp¥Ç¡¼¥¿¤òºîÀ®¤¹¤ë¤è¤¦¤Ê¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤¹¤ë¤È¤¤ËÀßÄꤹ¤ë¡£
10,000¤Þ¤Ç¤Î¾®¤µ¤ÊÃͤò»ØÄꤹ¤ë¤È¡¢
¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤Î²ó¿ô¤òÁý¤ä¤»¤ë¡£
10,000̤Ëþ¤ÎÃͤ¬°ÕÌ£¤ò»ý¤Ä¤Î¤Ï¤Ä¤®¤Ë¥¬¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤¬µ¯¤¤ë¤Þ¤Ç¤Ç¤¢¤ë¡£
garbage-collect
¤ÏïçÃͤò10,000¤ËÌ᤹¡£
garbage-collect
¤¬ÊÖ¤¹Ãͤϡ¢¥Ç¡¼¥¿·¿¤´¤È¤ÎLisp¥Ç¡¼¥¿¤Î¥á¥â¥ê»ÈÍÑÎ̤Ǥ¹¡£
ÂоÈŪ¤Ë¡¢´Ø¿ômemory-limit
¤Ï¡¢
Emacs¤¬¸½ºß»ÈÍÑÃæ¤Î¥á¥â¥êÁíÎ̤˴ؤ¹¤ë¾ðÊó¤òÍ¿¤¨¤Þ¤¹¡£
¤³¤Î´Ø¿ô¤Ï¡¢Emacs¤¬ºÇ¸å¤Ë³ä¤êÅö¤Æ¤¿ºÇ½ª¥Ð¥¤¥È¤Î¥¢¥É¥ì¥¹¤ò 1024¤Ç³ä¤Ã¤¿¤â¤Î¤òÊÖ¤¹¡£ Ãͤò1024¤Ç³ä¤ë¤Î¤Ï¡¢Lisp¤ÎÀ°¿ô¤Ë¼ý¤á¤ë¤¿¤á¤Ç¤¢¤ë¡£
ÆÉ¼Ô¤ÎÁàºî¤¬¥á¥â¥ê»ÈÍÑÎ̤ˤɤΤ褦¤Ë±Æ¶Á¤¹¤ë¤«¤òÄ´¤Ù¤ë¤Î¤Ë»È¤¨¤ë¡£