Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[1009] Re:Re: '사용하느데요 잘 모르게쎈요' => 이거 어디 사투리죠?? ^^ <- 그거 오타요~
만해 [greenuri] 1517 읽음    2002-08-17 16:47
안녕하세요 만해입니다

김백일님의 예제와 제가 가지고 있던 두권의책 (금년초에 국어판으로 번역된 STL책)을 참고 삼아서

고쳤더니 이제 잘되는데요

사실 TObjectTagList라는 것은

typedef struct _TObjectTagList
{
  unsigned int TagType;
  unsigned int Size;
  bool  IsCon;
  unsigned int Count;
}TObjectTagList;

보시는것과 같이 그냥 구조체입니다.

제가 클래스로 안만든 이유가

typedef struct _TTag
{
    TProperty* Property;
    bool      Root;
    bool      IsEnd;
    bool IsTerminal;
    bool IsTerminator;
    char* Contents;
    char* TagName;
    _TTag*    InnerTag;
    _TTag*    NextTag;
    _TTag*    ParentNode;
}TTag;

TTag라는 여기 잇는 구조체가 원래는 클래스였는데요

프로그램을 수행하다 보니 메모리를 넘 많이 잡아 먹어서요(200메가 넘게 잡아 먹어요~)

그 이유는 저 TTag라는 클래스가 HTML 문서에서 태그가 하나 나타날때마다 동적으로 생성됩니다.

작업관리자로 이유를 알아본 결과

TTag* Tag = new TTag; <- 이문장 전후로 메모리 사용량이 16Kb 증가

그래서 TObjectTagList라는것도 클래스로 안 만들어 놨는데

원래 TTag 클래스 정의 하는 데서 뭐가 잘못된건지 좀 알려 주실수 없을까요?

밑에 소스 있습니다

천천히 해주셔도 됩고요~ 이런 부탁 해서 미안합니다 ^^a;;
/*-----------------------------------------------------------------------------
Unit Name: HtmlTagInfo
Author:    greenuri
Purpose:   Html Tag의 정보를 가지는 클래스를 정의.
History:   2002-08-02 기본 구조 설계
            2002-08-03 기본 소스 생성 TTagToken,THtmlTag,TPeopertyTag 클래스 생성.
-----------------------------------------------------------------------------*/
#ifndef HtmlTagInfoH
#define HtmlTagInfoH
//---------------------------------------------------------------------------
#include <algorithm>
#include <vector.h>
#include <set.h>
#include <map.h>
#include <deque.h>
#include <bitset.h>
#include <vcl.h>
//---------------------------------------------------------------------------
//2002-08-03
//  HTML Parser 구조
//  NameSpace를 이용 다른 라이버러리와의 분리
//---------------------------------------------------------------------------
namespace HtmlTagInfo
{
/*-----------------------------------------------------------------------------
  Class : TTagToken
  Author:    greenuri
  Date:      2002-08-03
  TTagToken 구조.
           클래스
           ATagName : String ; 태그 명
           AIsTerminal : bool ; 터미널 태그 유무
           AProperty : 속성들에 대한 값을 가짐.
           AIsTerminal :  //종료태그인지 판단 , 종료 태그 : true
           AIsTerminator: // 단말 태그인지 아닌지 판단, 단말 태그 : true.
-----------------------------------------------------------------------------*/
typedef struct TProperty
{
AnsiString PropertyName;
AnsiString PropertyValue;
}TProperty_u ;
typedef vector<TProperty*> TPropertyList;
//-----------------------------------------------------------------------------
class TTagToken
{
  private :
    AnsiString ATagName;
    bool AIsTerminal;
    bool AIsTerminator;
    TPropertyList AProperty;
  public :

    TTagToken ();
    TTagToken  (AnsiString TagName, bool IsTerminal, bool IsTerminator ,
                TPropertyList Property );
    ~TTagToken(){}

    void  TagName ( AnsiString Name ){ATagName=Name;};
    AnsiString  TagName ( void ) { return ATagName; };
    void  IsTerminal ( bool IsTerminal ) {AIsTerminal = IsTerminal;};
    bool  IsTerminal ( void ) {return AIsTerminal;};
    void  IsTerminator ( bool IsTerminator ) {AIsTerminator = IsTerminator;};
    bool  IsTerminator ( void ) {return AIsTerminator;};
    void  Property ( TPropertyList Property )
    {
      AProperty.clear();
      AProperty = Property;
    };
    TPropertyList  Property ( void ){return AProperty;};
};

//-----------------------------------------------------------------------------
class TTag : public TTagToken
{
  private :
   TTag*     AInnerTag;
   TTag*     ANextTag;
   TTag*     AParentNode;
   bool      ARoot;
   bool      AIsEnd;
   AnsiString AContents;

  public :

    TTag():TTagToken()
      {
        TTagToken();
        AInnerTag = NULL;
        ANextTag = NULL;
        AParentNode = NULL;
        ARoot = false;
        AIsEnd = false;
        AContents="";
      };

    TTag( TTagToken Token ):TTagToken(Token)
      {
        AInnerTag = NULL;
        ANextTag = NULL;
        AParentNode = NULL;
        ARoot = false;
        AIsEnd = false;
        AContents="";
      };

    TTag( TTag* InnerTag ,TTag* NextTag, bool Root=false):TTagToken()
      {
        AInnerTag = InnerTag;
        ANextTag = NextTag;
        AParentNode = NULL;
        ARoot = Root;
        AIsEnd = false;
        AContents="";
      };

    TTag( TTag* InnerTag ,TTag* NextTag ,TTag* ParentNode, bool Root=false):TTagToken()
      {
        AInnerTag = InnerTag;
        ANextTag = NextTag;
        AParentNode = ParentNode;
        ARoot = Root;
        AIsEnd = false;
        AContents="";
      };


    TTag* InnerTag ( void ){return AInnerTag;};
    void  InnerTag ( TTag* InnerTag ){AInnerTag = InnerTag;};

    TTag* NextTag(void){return ANextTag;};
    void  NextTag(TTag* NextTag){ANextTag = NextTag;};

    TTag* ParentNode(void){return AParentNode;};
    void  ParentNode(TTag* ParentNode){AParentNode = ParentNode;};

    void  Root ( bool Root ) {ARoot = Root;};
    bool  Root ( void ) { return ARoot;};

    void  End ( bool IsEnd ) { AIsEnd = IsEnd;};
    bool  End ( void ) { return AIsEnd;};

    void Contents ( AnsiString Content )
      {
        AContents = Content;
      }
    AnsiString Contents ( void ) { return AContents;};

};
//---------------------------------------------------------------------------
typedef TTag* THTML; // Tags의 집합 -> HTML 문서
//---------------------------------------------------------------------------
};
#endif


+ -

관련 글 리스트
1007 [만해] map 에서 find 함수를 사용하느데요 잘 모르게쎈요 답변 부탁 드립니다. 만해 1673 2002/08/17
1008     Re: '사용하느데요 잘 모르게쎈요' => 이거 어디 사투리죠?? ^^ 김백일 1623 2002/08/17
1009         Re:Re: '사용하느데요 잘 모르게쎈요' => 이거 어디 사투리죠?? ^^ <- 그거 오타요~ 만해 1517 2002/08/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.