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

C++빌더 Q&A
C++Builder Programming Q&A
[22153] Re: 제 생각에는여...
CCOL [kkol] 982 읽음    2002-10-22 10:32
: int nCount = 100000 * 10;
: for (int nLen = 0; ii < nCount; nLen+=10)
: {
:   pAlloc = (char*)::HeapReAlloc(hProc, NULL, pAlloc, nLen+10);
:   ::CopyMemory(pAlloc+nLen, pAdd, 10);
: }
:
: ::HeapFree(hProc, NULL, pAlloc);
:


제가 AnsiString을 만든다면 이런식으로 복사하지는 않을듯 합니다.
즉 10문자 길이의 문자열을 붙일때마다 Memory를 재 할당 하지는 않을거란 얘기죠
메모리를 무조건 늘리는것이 아니라
정해지 사이즈 만큼 순차적으로 필요할때 증가 하면 훨씬더 빠르지 않을까요?

즉 처음 문자열을 저장할때 100바이트 정도 확보하고
그다음 10번 루프 도는 동안은 이미 할당한 메모리가지고 계속 복사만 해주고
다음 메모리가 부족하면 또 100바이트 정도 메모리 확보하는 방식으로 만들면
속도가 빠를꺼 같은데요.

int nCount = 100000 * 10;
int iHeapSize = 0;
for(int nLen=0; nLen<nCount; nLen+=10)
{
   if(iHeapSize < nLen+10)
   {
      iHeapSize += 100;
      pAlloc = (char*)::HeapReAlloc(hProc, NULL, pAlloc, iHeapSize);
   }
   ::CopyMemory(pAlloc+nLen, pAdd, 10);
}

대충 이렇게 하면 ReAlloc호출이 줄어들지 않을까 합니다..



+ -

관련 글 리스트
22141 AnsiString의 비밀은 뭘까? 김상구.패패루 1263 2002/10/21
22153     Re: 제 생각에는여... CCOL 982 2002/10/22
22156         Re: ^^ Capacity를 말씀하시는거군요.. 김상구.패패루 968 2002/10/22
22145     Re: AnsiString의 비밀은 뭘까? 김백일 1350 2002/10/21
22148         Re:Re: AnsiString의 비밀은 뭘까? 김상구.패패루 1667 2002/10/22
22146         Re:Re: AnsiString의 비밀은 뭘까? 만해 1193 2002/10/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.