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
[42631] Re:고전과 신식의 충돌
마술감자 [magicpotato] 804 읽음    2005-11-24 09:53
new가 내부적으로 어떻게 작동되며, 2번째 코드에서 속도를 먹는 부분을 설명하겠습니다.

: char* p = new char[100];
: char* p = (char*)malloc(100 * sizeof(char))


첫번째는 다음과 비슷한 형태의 함수 또는 인라인 코드를 실행합니다.

new(size n, ...)
{
    p = malloc(n);
    p->p(...); // 만약 클래스이면서 생성자가 있는 경우
}

다만, size n을 넘길 때 char이라는 형을 기반으로 상수값이 넘어가는지,
sizeof를 해서 넘기는지는 잘 모르겠습니다.

2번째 코드는 malloc을 호출하기 이전에 속도를 먹는곳은 100 * sizeof(char) 부분 뿐입니다.

요즘 컴파일러는 자료형에 대한 sizeof() 정도는 기본적으로 상수로 박아서 최적화 해주기 때문에
일반적인 컴파일이라면 속도는 2번째 코드가 더 빠릅니다.

최적화를 안할때는 new에서 size 계산을 어떻게 하는지 잘 모르겠지만
2번째 코드와 비슷하게 한다면 역시 속도는 2번째 코드가 더 빠릅니다.

효율성 문제는 없습니다.
클래스를 동적 생성 할때 malloc을 쓰면, 논리적으로 실수를 했을수도 있지만,
클래스를 구조체로 쓰는 분들도 계시고, 특수 목적으로 생성자를 호출하지 않는 분도 있습니다.
char를 동적 생성 할때 new를 써도 커버가 되기 때문에 뭐라고 탓 할 수 없습니다.

더 깊게 공부하고 싶으시면 operator new와 delete에 대해서 찾아보시기 바랍니다.

김상면 님이 쓰신 글 :
: char* p = new char[100];
: char* p = (char*)malloc(100 * sizeof(char))
: 위의 두문장중 어느것이 더 빠르고 효율적일까? 물론 코딩은 두번째가 못하겠지만....
:
: 참으로 미묘하당 그지요?
: 그럼

+ -

관련 글 리스트
42630 고전과 신식의 충돌 김상면 796 2005/11/24
42631     Re:고전과 신식의 충돌 마술감자 804 2005/11/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.