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
[50777] Re:배열 동적 생성하기..
장성호 [nasilso] 1534 읽음    2007-10-09 00:55
아래 코드로 님의 시스템에서 얼마나 많은 시간이 걸리나요?
제 pc가 특별히 빠르지 않지만 0.1초가 걸리지 않는것 같던데..

맨첫번째는 70ms정도 걸리구 두번째 부터는 12ms정도 걸리더군요

사실 70ms도 엄청나게 큰 시간이죠




그래서 빠르게 할당하는 방법을 생각해봤습니다.

방법은?
    아래 1만번을 new 를 반복하면서 동적할당하는데..
    new는 한번만 하고 포인터 배열에 해당위치의 주소를 찾아서 넣는 방법으로 해봤습니다.
    그러니 제 시스템에서 1ms가 걸릴까 말까 하더군요


#include "Mmsystem.h"  //timeGetTime()함수를 쓰기위해

BYTE *pData[10000];
void __fastcall TForm1::Button1Click(TObject *Sender)
{

    BYTE *buf;
    timeBeginPeriod(1);
    DWORD     dwStartTime = timeGetTime();

    buf=(BYTE *)malloc(10000*5000);                      //한번에 10000*5000 Byte를 메모리에 확보
    for(int i=0;i<10000;i++)pData[i]=&buf[i*5000];         // 적절한 메모리 주소를 포인터 배열에 설정
       
    ShowMessage(IntToStr( timeGetTime()- dwStartTime));
}



위 코드가 메모리 확보가 빠른이유는?

단지 new를 1만번 하는대신
malloc으로 한번에 할당한 것 뿐인데 왜 빠를까요?
단지 new 라는게 그렇게 시간을 많이 잡아먹을까요?

님의 코드에서 pData[i] = new BYTE[5000];  이부분을
pData[i] = new BYTE[5]; 이렇게 size를 줄여보십시요
그러면 시간이 확줄어들것입니다.

이는 가상메모리와 물리 메모리를 거시기(?) 해주는 페이징 기법과 관련된 문제일것입니다.
총 메모리 size를 4KByte이하로 new해보세요
그럼 확실이 빠를것입니다.

저도 지식이 짧아서 더 정확한 설명은 못드리겟구요

자세한 설명은 고수님들께 .....


그럼..



이용태 님이 쓰신 글 :
: 배열을 할당하는데 시간이 많이 걸리더군요...
:
: 속도를 요하는 작업을 수행해야 하는데... 배열 할당하는데 대부분의 시간을 투자하다보니... 원하는 성능이 나오지 않습니다..
:
: 제가 사용한 방법은 밑의 소스와 같은데요...
:
: 배열 포인터(10000개짜리)를 생성한 후,  5000개짜리 배열을 동적으로 각각 생성시켰습니다.
:
: BYTE *pData[10000]; //원본 데이터
: for(int i = 0; i < 10000; i++)
: {
:      if(pData[i] != NULL)
:             delete [] pData[i];
:     
:      pData[i] = new BYTE[5000];
: }
:
: 시간 아주 많이 걸립니다..ㅡㅡ;;;;
:
: 혹시 10000개짜리 pData 포인터에 5000개짜리 배열을 한방에 생성시키는 방법이 있지않을까요?
:
: 만약 이것이 불가능하다면... 다른 방법은 무엇이 있을까요?
:
: 답변 부탁드립니다...

+ -

관련 글 리스트
50775 배열 동적 생성하기.. 이용태 1236 2007/10/08
50777     Re:배열 동적 생성하기.. 장성호 1534 2007/10/09
50776     Re:배열 동적 생성하기.. 시녕tm 1149 2007/10/09
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.