´Ù. ¹«ÇÑ ¸Þ¸ð¸®

ApiEdit´Â ÃʱâÈ­½Ã 64KBÀÇ °íÁ¤ ±æÀÌ ¹öÆÛ¸¦ ÇÒ´çÇϸç ÀÌ ¹öÆÛ¿¡¼­ ÅؽºÆ®¸¦ ÆíÁýÇÑ´Ù. ¹öÆÛ°¡ ¾ÖÃʺÎÅÍ °íÁ¤µÈ ±æÀÌÀÇ ¹è¿­·Î ¼±¾ðµÇ¾ú±â ¶§¹®¿¡ ÀÌ ÀÌ»óÀÇ ÅؽºÆ®´Â ÆíÁýÇÒ ¼ö ¾ø´Ù. ÀÌ Á¤µµ ±æÀ̸é Áö±Ý±îÁöÀÇ ¿¹Á¦ ¼öÁØ¿¡¼­ ±â´ÉµéÀ» Å×½ºÆ®Çغ¸±â¿¡´Â ÃæºÐÇÑ ¿ë·®ÀÌÁö¸¸ ½ÇÁ¦ »ç¿ëÇϱ⿡´Â ÅξøÀÌ ºÎÁ·ÇÏ´Ù. 64KB¶ó¸é Á¶±Ý ±ä SQL ½ºÅ©¸³Æ®³ª HTML Ȩ ÆäÀÌÁö ¹®¼­¸¦ ÆíÁýÇϱ⿡µµ ºÎÁ·ÇÑ ¼öÁØÀÌ°í C ¼Ò½º¶ó¸é ºÒ°ú ¸î ÁÙ µÇÁöµµ ¾Ê´Â´Ù.

±×·¸´Ù¸é ¹öÆÛÀÇ Å©±â¸¦ ´Ã·Á¾ß Çϴµ¥ ¾ó¸¶ Á¤µµ·Î ´Ã¸®¸é ÃæºÐÇÒ±î? 10¹è ´Ã·Á 640KB·Î ÇÏ¸é ±×·°Àú·° ¾µ¸¸ÇÑ ¿ë·®ÀÌ µÉ °ÍÀÌ°í ´ëÆø È®ÀåÇÏ¿© 10MB Á¤µµ¶ó¸é ¾ÆÁÖ ³Ë³ËÇÒ °ÍÀÌ´Ù. ±×·¯³ª ¹öÆÛÀÇ Å©±â¸¦ ¾ó¸¶·Î ´Ã¸®´õ¶óµµ Ç×»ó ºÎÁ·ÇÒ ¼ö Àֱ⠶§¹®¿¡ °íÁ¤µÈ Å©±â·Î ´Ã¸®´Â °ÍÀº º° ¼Ò¿ëÀÌ ¾ø´Ù. 256MB Á¤µµ·Î ´Ã¸®¸é ¹°·Ð ºÎÁ·ÇÒ ¸®¾ß ¾ø°ÚÁö¸¸ ÀÌ Á¤µµ ¸Þ¸ð¸®¸¦ ³» ÁÙ ¼ö ÀÖ´Â PC°¡ ÈçÇϰڴ°¡?

ApiEditÀÇ ¹®Á¦Á¡Àº ¹öÆÛ°¡ ÀÛ´Ù´Â °ÍÀÌ ¾Æ´Ï¶ó °íÁ¤µÈ Å©±â¸¦ °¡Áø´Ù´Â Á¡ÀÌ´Ù. ÆíÁýÇÒ ÅؽºÆ®°¡ Ä¿Áö¸é ¸Þ¸ð¸® »ç¿ë·®ÀÌ ¸¹¾ÆÁö´Â °ÍÀº ´ç¿¬ÇϹǷΠÅؽºÆ®ÀÇ Å©±â¿¡ ¸Â°Ô ¹öÆÛÀÇ Å©±âµµ µ¿ÀûÀ¸·Î °ü¸®ÇÒ ¼ö ÀÖ´Ù¸é °¡Àå ÀÌ»óÀûÀÌ´Ù. ¹®¼­ÀÇ Å©±â¿¡ ¸ÂÃß¾î »ç¿ë ¸Þ¸ð¸®¸¦ ´Ã·Á °£´Ù¸é ÀÌ·ÐÀûÀ¸·Î ¹öÆÛÀÇ ±æÀÌ´Â ¹«ÇÑ´ë°¡ µÈ´Ù. ÀÌ·¸°Ô ¸Þ¸ð¸®¸¦ °ü¸®Çϴµ¥ PCÀÇ ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ »óȲÀÌ µÈ´Ù¸é ÀÌ´Â ÇÁ·Î±×·¥À¸·Î¼­´Â ¾î¿ ¼ö ¾ø´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¥ÀÌ ÁÖ¾îÁø ¹°¸®Àû ÇÑ°è±îÁö Ã¥ÀÓÁú ÇÊ¿ä´Â ¾øÀ¸¸ç ÀÖ´Â ¸Þ¸ð¸®¸¸ Àß È°¿ëÇÒ ¼ö ÀÖµµ·Ï ÀÛ¼ºÇÏ¸é µÈ´Ù.

µ¿ÀûÀ¸·Î °ü¸®ÇØ¾ß ÇÒ ÁÖ ´ë»óÀº ÅؽºÆ® ¹öÆÛÀÎ bufÀÌÁö¸¸ ÀÌ¿Ü¿¡ ÁÙ Á¤º¸ ¹è¿­ÀÎ pLineµµ °ü¸® ´ë»óÀÌ´Ù. ÀÌ ¹è¿­ÀÇ Å©±â´Â 10000À¸·Î ÃʱâÈ­µÇ¹Ç·Î ¸¸ ÁÙ ÀÌ»ó ÆíÁýÀº ºÒ°¡´ÉÇÏ´Ù. ¹®¼­ÀÇ ±æÀÌ°¡ ±æ¾îÁö¸é pLine ¹è¿­µµ ¹®¼­ ±æÀÌ¿¡ ¸Â°Ô °°ÀÌ ´Ã¾î³ª¾ß ÇÑ´Ù. ±×·¸´Ù°í Çؼ­ ºÏ¸¶Å© ¹è¿­ÀÎ arMark±îÁö µ¿ÀûÀ¸·Î °ü¸®ÇÒ ÇÊ¿ä´Â ¾ø´Ù. ApiEdit´Â ¾ÖÃÊ¿¡ ½ºÆÑÀ» ÀâÀ» ¶§ ºÏ¸¶Å©´Â ¹®¼­´ç 100°³ ÀÌÇÏ·Î °áÁ¤Ç߱⠶§¹®ÀÌ´Ù.

¹öÆÛ °ü¸®¸¦ À§ÇØ ´ÙÀ½ µÎ º¯¼ö¸¦ ¼±¾ðÇÑ´Ù. À̸§¿¡¼­ ¾Ë ¼ö ÀÖµíÀÌ buflenÀº ÅؽºÆ® ÆíÁý ¹öÆÛÀÇ Å©±âÀ̸ç LinelenÀº ÁÙ Á¤º¸ ¹è¿­ÀÇ Å©±âÀÌ´Ù. intÇüÀ¸·Î ¼±¾ðÇßÀ¸¹Ç·Î µÎ ¹öÆÛÀÇ ÀÌ·ÐÀûÀÎ ÃÖ´ë Å©±â´Â 2G°¡ µÈ´Ù.

 

int buflen;

int Linelen;

 

OnCreate¿¡¼­ ÀÌ µÎ º¯¼ö¸¦ ÃʱâÈ­ÇÔ°ú µ¿½Ã¿¡ ÀÌ ±æÀ̸¸Å­ ¹öÆÛ¸¦ Ãʱâ ÇÒ´çÇÏ¿´´Ù. °íÁ¤ ±æÀÌÀÇ ÇÒ´ç¹®À» »èÁ¦ÇÏ°í buflen°ú Linelen °ª¸¸Å­ ÇÒ´çÇϵµ·Ï ¼öÁ¤ÇÑ´Ù.

 

BOOL OnCreate(HWND hWnd, LPCREATESTRUCT lpCreateStruct)

{

     ....

     buflen=1024;

     buf=(TCHAR *)malloc(buflen);

     memset(buf,0,buflen);

     Linelen=100;

     pLine=(tagLine *)malloc(sizeof(tagLine)*Linelen);

     for (i=0;i<Linelen;i++) {

          pLine[i].Start=-1;

     }

 

¹öÆÛÀÇ ÃʱⰪÀº 1024(1KB)·Î Àâ¾Ò°í bufµµ ÀÌ ±æÀÌ¿¡ ¸Â°Ô ÇÒ´çÇß´Ù. ¾îÂ÷ÇÇ ºÎÁ·ÇÏ¸é ´Ã·ÁÁÙ °ÍÀ̹ǷΠóÀ½ºÎÅÍ Å« ¹öÆÛ¸¦ ÀâÀ» ÇÊ¿ä°¡ ¾ø´Ù. ApiEdit´Â ÄÁÆ®·ÑÀÌ°í °íÀÛ »ç¶÷ À̸§ Á¤µµ¸¦ ÀԷ¹޴ ¿ëµµ·Îµµ »ç¿ëÇÒ ¼ö ÀÖÀ¸¸ç ÇÑ À©µµ¿ì¿¡ ¼ö½Ê °³°¡ »ý¼ºµÉ ¼öµµ ÀÖÀ¸¹Ç·Î óÀ½ºÎÅÍ Å« ¹öÆÛ¸¦ °¡Áö´Â °ÍÀº ¿ÀÈ÷·Á ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ÀÌ·± ¸é¿¡¼­ º»´Ù¸é 1024¹ÙÀÌÆ®µµ °áÄÚ ÀÛÀº ¿ë·®ÀÌ ¾Æ´Ï´Ù. ÁÙ Á¤º¸ ¹è¿­µµ ÃʱⰪÀº 100ÁÙ·Î Ãà¼ÒµÇ¾ú´Ù.

ApiEdit´Â Ãʱ⿡ ÇÒ´çµÈ 1024 Å©±âÀÇ ¹öÆÛ¿¡¼­ ÅؽºÆ® ÀÔ·ÂÀ» ¹Þ´Â´Ù. ±×·¯´Ù°¡ ÅؽºÆ® ±æÀÌ°¡ ¹öÆÛº¸´Ù ´õ Ä¿Áö¸é ±×¶§ ¹öÆÛ¸¦ ´Ã¸®´Âµ¥ ÀÌ ÀÛ¾÷ÀÌ ÇÊ¿äÇÑ À¯ÀÏÇÑ ½ÃÁ¡Àº ÅؽºÆ®°¡ »ðÀԵǴ Insert ÇÔ¼öÀÌ´Ù. ¹öÆÛ¿¡ ÅؽºÆ®¸¦ Ãß°¡ÇÏ´Â ¸ðµç ÇÔ¼ö´Â Insert¸¦ ÅëÇϵµ·Ï µÇ¾î ÀÖÀ¸¹Ç·Î ÀÌ ÇÔ¼ö¿¡¼­¸¸ ¹öÆÛ¸¦ °ü¸®ÇÏ¸é µÈ´Ù.

 

void Insert(int nPos, TCHAR *str)

{

    int needlen;

 

     if (bReadOnly)

          return;

 

    needlen=lstrlen(buf)+lstrlen(str)+1;

    if (needlen > buflen) {

        buflen = needlen+1024;

        buf=(TCHAR *)realloc(buf,buflen);

        if (buf == NULL) {

        }

    }

 

ÇöÀç ¹öÆÛÀÇ ±æÀÌ¿Í »ðÀ﵃ ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ´õÇØ ÇÊ¿äÇÑ ¸Þ¸ð¸® ¾çÀ» °è»êÇÑ´Ù. ¿©±â¿¡ 1À» ´õÇÏ´Â ÀÌÀ¯´Â ³Î Á¾·á¹®ÀÚÀÇ °ø°£À» º¸Á¸Çϱâ À§Çؼ­ÀÌ´Ù. ³Î Á¾·á¹®ÀÚ´Â ¹Ýµå½Ã ¹öÆÛ ³¡¿¡ ÀÖ¾î¾ß ÇϹǷΠÀÌ ¹®ÀÚ°¡ »ðÀԵǴ ¹®ÀÚ¿­¿¡ ÀÇÇØ µ¤¿©¼­´Â ¾ÈµÈ´Ù. ¿¹¸¦ µé¾î 10¹ÙÀÌÆ®°¡ ÇÒ´çµÇ¾î ÀÖ°í ±× Áß 7¹ÙÀÌÆ®ÀÇ ¹®ÀÚ°¡ µé¾î ÀÖ´Ù°í ÇÏÀÚ. À̶§ 3¹ÙÀÌÆ®°¡ »ðÀԵȴٸé ÇÊ¿äÇÑ ±æÀÌ´Â 7+3+1ÀÎ 11¹ÙÀÌÆ®°¡ µÈ´Ù. n¹®ÀÚ¸¦ ±â¾ïÇϱâ À§ÇÑ ¹öÆÛÀÇ Å©±â´Â ÃÖ¼ÒÇÑ n+1ÀÌ µÇ¾î¾ß ÇϹǷΠÇÊ¿äÇÑ ¸Þ¸ð¸®·®¿¡ ³Î Á¾·á¹®ÀÚºÐÀº ¹Ýµå½Ã Æ÷ÇÔÇØ¾ß ÇÑ´Ù.

ÀÌ·¸°Ô °è»êµÈ ¸Þ¸ð¸® ÇÊ¿ä·®ÀÌ ÇÒ´çµÇ¾î ÀÖ´Â ¹öÆÛ ±æÀÌÀÎ buflenº¸´Ù ´õ Å©´Ù¸é À̶§°¡ ¹Ù·Î ¹öÆÛ¸¦ ´Ã·ÁÁÙ ¶§ÀÌ´Ù. ¹öÆÛÀÇ Å©±â¸¦ ´Ã¸®´Â ¹æ¹ýÀº ¾ÆÁÖ °£´ÜÇÏ´Ù. realloc ÇÔ¼ö´Â ÁöÁ¤ÇÑ Å©±â¸¸Å­ ¸Þ¸ð¸®¸¦ ÀçÇÒ´çÇÒ »Ó¸¸ ¾Æ´Ï¶ó ±âÁ¸ ¹öÆÛ ³»¿ëÀ» »õ·Î ÇÒ´çµÈ °÷À¸·Î º¹»çÇϹǷΠ¹öÆÛÀÇ ³»¿ë ÀÚü´Â °ü¸®ÇÏÁö ¾Ê¾Æµµ µÈ´Ù.

À̶§ ²À ÇÊ¿äÇÑ ¸¸Å­ÀÎ needlen¸¸Å­ Å©±â¸¦ ´Ã¸®´Â °ÍÀÌ ¾Æ´Ï¶ó ¿©±â¿¡ 1024Á¤µµÀÇ ¿©À¯¸¦ ´õ ÁØ´Ù. ÀÌ ¿©À¯ºÐÀ» ÁÖÁö ¾ÊÀ¸¸é ÇѱÛÀÚ ÀÔ·ÂÇÒ ¶§¸¶´Ù ¹öÆÛ ÀçÇÒ´çÀÌ ¹ß»ýÇϹǷΠÀÔ·Â ¼Óµµ°¡ ´À·ÁÁö°Ô µÉ °ÍÀÌ´Ù. ¹öÆÛ°¡ ºÎÁ·ÇØ ÀçÇÒ´çµÇ¸é Á¶¸¸°£ ´Ù½Ã ÀçÇÒ´çµÉ °ÍÀÓÀ» ¿¹»óÇÏ°í ¹Ì¸® ÇÊ¿ä·®º¸´Ù ´õ ¸¹ÀÌ ÇÒ´çÇسõ´Â °ÍÀÌ´Ù. ¹öÆÛ¸¦ ÀçÇÒ´çÇÑ ÈÄ´Â ¿¡·¯ 󸮰¡ ÇÊ¿äÇѵ¥ ÀÌ ºÎºÐÀº ÀÏ´Ü Áغñ¸¸ ÇØµÎ°í °ø¶õÀ¸·Î ³²°Ü µÎ¾ú´Ù. Win32 ȯ°æ¿¡¼­ ¸Þ¸ð¸® ÇÒ´ç ÇÔ¼ö´Â °ÅÀÇ ½ÇÆÐÇÏÁö ¾Ê´Â´Ù. ÁÙ ¹öÆÛ °ü¸®´Â pLine ¹è¿­À» ¸¸µå´Â UpdateLineInfo¿¡¼­ ÇÑ´Ù.

 

void UpdateLineInfo()

{

     int l,s,e;

     int nPara, nLine=0;

    int i;

 

     for (l=0, nPara=0;;l++) {

        if (l >= Linelen) {

           Linelen += 1000;

           pLine=(tagLine *)realloc(pLine,sizeof(tagLine)*Linelen);

           if (pLine == NULL) {

           }

           for (i=Linelen-1000;i<Linelen;i++) {

               pLine[i].Start=-1;

           }

        }

          GetLine(l,s,e);

          ....

 

¹æ½ÄÀº µ¿ÀÏÇÏ´Ù. Á¤·ÄÇÏ´Ù°¡ ÇÒ´çÇسõÀº ¹è¿­Å©±â¸¦ ³Ñ¾î¼³ ¶§ ¹è¿­À» ´Ã¸°´Ù. À̶§µµ 1000ÁÙ Á¤µµÀÇ ¿©À¯ºÐÀ» ÁÖ¾î ÀçÇÒ´çÀÌ ³Ê¹« ÀÚÁÖ ÀϾÁö ¾Êµµ·Ï ÇØ¾ß ÇÑ´Ù. »õ·Î ÇÒ´çµÈ pLineÀÇ Startµµ -1·Î ÃʱâÈ­ÇÑ´Ù. ÀÌ µÎ ÇÔ¼ö¿¡ ÀÇÇØ ÅؽºÆ® ¹öÆÛ¿Í ÁÙ Á¤º¸ ¹è¿­Àº ¹®¼­ Å©±â¿¡ ¸ÂÃß¾î ¹öÆÛ¸¦ ´Ã·Á ³ª°¡¹Ç·Î ¸Þ¸ð¸®°¡ Çã¶ôÇÏ´Â ÇÑ ¾Æ¹«¸® Å« ¹®¼­¶óµµ ÀоîµéÀÏ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ÇÑ ¹ø ´Ã¾î³­ ¸Þ¸ð¸®¸¦ ±»ÀÌ ÁÙÀÏ ÇÊ¿ä´Â ¾ø´Ù. ¸Þ¸ð¸®°¡ ºÎÁ·ÇÑ °ÍÀº ¹®Á¦°¡ µÇÁö¸¸ ³²´Â °ÍÀº ¹®Á¦°¡ µÇÁö ¾ÊÀ¸¸ç ¸Þ¸ð¸® Ãà¼Ò¸¦ À§ÇÑ ¿©ºÐÀÇ Á¶°Ç Á¡°Ë°ú ÀçÇÒ´çÀº ¿ÀÈ÷·Á ¼º´ÉÀ» ¶³¾î¶ß¸®±â ¶§¹®ÀÌ´Ù. Ãà¼Ò°¡ ¹Ýµå½Ã ÇÊ¿äÇÑ »óȲÀº È®·üÀûÀ¸·Î ÈçÇÏÁö ¾Ê´Ù.

¿©±â±îÁö ÀÛ¾÷ÇÑ ÈÄ ±ä ¹®ÀÚ¿­À» ÀÔ·ÂÇغ¸ÀÚ. ¾Æ¹«¸® ±ä ¹®ÀÚ¿­À» ÀÔ·ÂÇصµ ¼Óµµ°¡ Á» ´À·ÁÁú »Ó ApiEdit°¡ Á״´ٰųª ÇÏÁö´Â ¾ÊÀ» °ÍÀÌ´Ù. ¾ÆÁ÷ ÆÄÀÏÀ» ÀÐÁö´Â ¸øÇÏÁö¸¸ Ŭ¸³º¸µå¸¦ ÅëÇØ ºÙ¿©³Ö±â°¡ °¡´ÉÇϹǷΠ±ä ¹®¼­¸¦ º¹»çÇؼ­ ¿©·¯ ¹ø ºÙ¿© º¸¸é µÈ´Ù. ¹«ÇÑ´ëÀÇ ¸Þ¸ð¸®¸¦ Áö¿øÇÏ´Â °ÍÀÌ »ý°¢º¸´Ù ½Ì°Ì°Ô ¿Ï·áµÈ °Í °°Àºµ¥ ÀÌ´Â ApiEdit°¡ ¸Þ¸ð¸® ±â¹ÝÀÇ ´ÜÀÏ ¹öÆÛ ±¸Á¶¸¦ °¡Áö°í ÀÖ°í ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇÏ´Â °÷ÀÌ ÇÑ ÇÔ¼ö·Î ÁýÁߵǾî Àֱ⠶§¹®ÀÌ´Ù.