Ä¿³Î ½ºÅà ũ±â Á¦ÇÑ »çÇ×
ÃÑ ÆäÀÌÁö ¼ö : 3121

Àüü ÇÔ¼ö/¿ë¾î»çÀü
ÇöÀçÀ§Ä¡ : article>stack_size


´ÙÀ½ Äڵ带 ÄÄÆÄÀÏÇÑ ÈÄ ½ÇÇà ½ÃÄѺ¸ÀÚ.

ÄÚµå´Â Linux kernel.2.4.20, gcc 3.2.2¸¦ ÅëÇØ¼­ Å×½ºÆ® µÇ¾ú´Ù.
#include <stdio.h> 
#include <string.h> 
 
void __a__(void) 
{ 
 unsigned char s_AAA[ 8 << 20 ]; // 8M 
 fprintf(stdout, "Entering memset\n");  
 memset(s_AAA, 0xff, sizeof(s_AAA));  
 fprintf(stdout, "Leave memset\n"); 
} 
 
int main(int s_Argc, char *s_Argv[]) 
{    
        __a__();  
        return(0);   
} 
 

±×·³ ¼¼±×¸ÕÆ® ÆúÆ® ¿¡·¯¸¦ Ãâ·ÂÇϸ鼭 Á¾·áµÇ¾î ¹ö¸°´Ù. ÀÌÀ¯´Â Ä¿³Î·¹º§¿¡¼­ °¢ ÇÁ·Î¼¼½º¿¡¼­ ÇÒ´ç °¡´ÉÇÑ ½ºÅûçÀÌÁî¿¡ Á¦ÇÑÀ» °¡Áö°í Àֱ⠶§¹®ÀÌ´Ù. ÀÌ·¯ÇÑ Á¦ÇÑ »çÇ×Àº ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Ù.
/usr/src/linux/include/linux/sched.h 
------------------------------------ 
#define _STK_LIM  (8*1024*1024) // 8M 
 

(¹è¿­µîÀ» Àú·¸°Ô Å©°Ô ¸¸µé¾î¼­ »ç¿ëÇÏ´Â °æ¿ì´Â µå¹°±ä ÇϰÚÁö¸¸) ÇÊÀÚÀÇ °æ¿ì¿¡µµ ¹è¿­À» ¸Å¿ì Å©°Ô Àâ¾Æ¼­ »ç¿ëÇØ¼­ ÄÚµùÇÑ ÇÁ·Î±×·¥ÀÌ ÀÖ¾ú´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ Àß µ¹´Ù°¡ °£È¤ Á×´Â ¹®Á¦°¡ ÀÖ¾ú´Âµ¥, ÀÌ ¹®Á¦ ÀâÀ»·Á°í »ó´çÈ÷ ½Ã°£À» ÅõÀÚÇß¾ú°í °á±¹ À§ÀÇ ½ºÅûçÀÌÁî Á¦ÇÑ ¹®Á¦ ¶§¹®À̶õ°É ¾Ë°Ô µÇ¾ú´Ù. ¹®Á¦´Â malloc()À» ÀÌ¿ëÇØ¼­ °£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ¾ú´Ù. ½ºÅÿµ¿ªÀ» »ç¿ëÇÏ´Â º¯¼öÀÇ »ç¿ë½Ã¿¡´Â Å©±â¿¡ ÁÖÀÇÇØ¼­ »ç¿ëÇØ¾ß ÇÑ´Ù´Â ±³ÈÆÀ» ¾ò¾ú´Ù.

ÀÌ°Ç Ä¿³Î Á¦ÇÑ »çÇ×À̹ǷΠLinux°¡ ¾Æ´Ñ ´Ù¸¥ ¿î¿µÃ¼Á¦¿¡¼­´Â ¹®Á¦°¡ µÇÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. ¿¹¸¦ µé¾î À©µµ¿ìÁî ȯ°æ¿¡¼­ÀÇ °æ¿ì À§ÀÇ ÄÚµå´Â ¹®Á¦ ¾øÀÌ ½ÇÇàµÇ¾ú´Ù. ¾î¶µç Å« ½ºÅø޸𸮸¦ »ç¿ëÇØ¾ß ÇÒ °æ¿ì¶ó¸é malloc()¸¦ ÀÌ¿ëÇØ¼­ µ¿ÀûÀ¸·Î ÇÒ´çÇϵµ·Ï ÇÏÀÚ.

¸¸¾à ÀÌ Á¦ÇÑÀ» Ç®±â À§ÇÑ ¹¦Ã¥À» ã´Â´Ù¸é 2°¡Áö°¡ ÀÖ½À´Ï´Ù. ù°´Â Ä¿³ÎÀÇ Çì´õ /usr/src/linux/include/sched.h ¿¡¼­ Á÷Á¢ ¼öÁ¤ÇÏ¿© Ä¿³ÎÀ» ÀçÄÄÆÄÀÏ ÇÏ´Â ¹æ¹ýÀÌ ÀÖÀ¸¸ç ¶Ç ´Ù¸¥ ¹æ¹ýÀº ulimit ¸í·É ¶Ç´Â ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ÇØ°áÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. "ulimit -s" ¸¦ ½ÇÇàÇØº¸½Ã¸é ÀÚ½ÅÀÇ ½ºÅà Á¦ÇѰªÀ» KByte ´ÜÀ§·Î ¾Ë¼ö ÀÖÀ¸¸ç À̰ÍÀ» "ulimit -s <½ºÅà ÃÖ´ë Á¦ÇѰª>" °ú °°Àº Çü½ÄÀ¸·Î º¯°æÇÒ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ CÄڵ忡¼­ »ç¿ëÇÏ·Á¸é man ÆäÀÌÁöÀÇ setrlimit(2) ¸¦ ÂüÁ¶Çغ¸¸é º¸´Ù ÁÁÀº Á¤º¸¸¦ È®ÀÎÇÒ¼ö ÀÖ´Ù.