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°¡ ¸Þ¸ð¸® ±â¹ÝÀÇ ´ÜÀÏ ¹öÆÛ ±¸Á¶¸¦ °¡Áö°í ÀÖ°í ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇÏ´Â °÷ÀÌ ÇÑ ÇÔ¼ö·Î ÁýÁߵǾî Àֱ⠶§¹®ÀÌ´Ù.