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
[73861] Re:Re:AnsiString 사용시 메모리 증가합니다.
송신영 [palindrome] 3711 읽음    2016-09-22 14:31
AnsiString *p = new AnsiString;
*p = "12345";

이런식으로 new로 선언했다면  delete 를 하기 전까지는 메모리 해제가 안되지만
AnsiString s = "12345"; 로 선언한 것은
해당 지역을 벗어날 때 자동 소멸됩니다. (여기서는 for loop를 벗어날 때)

아마도 메모리 증가는 코드상의 문제가 아니라 OS의 운영상에 이유로
초기에 적당한 메모리를 할당해 두고 필요시 점차 늘려가는 방식인데
사용이 줄었다고 바로 메모리 할당한 공간을 바로 다시 줄이지는 않습니다.
어차피 다시 필요할 수도 있기 때문이지요.

메모리 증가의 원인은 코드상이 문제보다 다른 이유가 있다고 보여집니다.
만약 해당 코드를 많이 수행해도 어느정도 선까지 메모리가 증가되고
더이상 증가되지 않을 경우에는 정상적인 것입니다.
코드에 문제가 있다면 해당 코드를 수행할 때마다 메모리가 지속적으로 증할 것입니다.

아래 링크 글을 참고하여 Breakpoint를 걸고 F7 키로 어떻게 동작되는지 한번 따라가 보세요.
Loop가 종료되는 시점에서 소멸자가 호출되는 것을 확인 할 수 있을 것입니다.

[IDE] C++Builder에서 디버깅할때 VCL 소스( pascal 소스) 안으로 ...

님이 쓰신 글 :
: 지역변수를 선언하면 메모리에 어떻게 위치하는지 알아보십시오.
: char, int, double 자료형은 스택이라고하는 위치에 생성됩니다. 그리고  선언된 함수가 리턴할때 스택과함께 사라집니다.
: 그러나 AnsiString은 '동적메모리할당'된 포인터입니다. 저멀리 힙에 생성됩니다.
: 그러므로 선언된 함수가 리턴해도 여전히 남아있습니다.
: 님의 코드에서는 같은이름으로 1만번이나 포인터를 만들고 있습니다.
: 같은이름으로 되어있으니 먼저번 포인터는 잃어버리고맙니다. 결국 1만개주에 9999개의 포인터는 잃어버린채로 맨마지막 1개의
: 포인터만 str이라는 이름으로 가지고 있는 것입니다.
: 이 메모리는 프로그램이 끝나야지 OS가  프로그램과 함께 모든 할당된 메모리를 회수하면서 사라집니다.
: for문 안에서 같은선언을 되풀이하는것은 문법적으로는 허용될지 몰라도 완전히 비논리적인 행동입니다.
:
: 그럼.
:
: AnsiString 님이 쓰신 글 :
: : void __fastcall TForm1::Button1Click(TObject *Sender)
: : {
: :     for(int i = 0; i < 10000; i++)
: :     {
: :         AnsiString str = "12345";
: :     }
: : }
: :
: : 버튼을 누르면 AnsiString에 값을 넣는 간단한 소스입니다.
: : 그런데 버튼 클릭 실행 후 메모리가 증가되고 감소가 되지 않습니다.
: :
: : char, int, double 자료형은 증가되지 않는데 유독 AnsiString만 증가 후 감소가 되지 않습니다.
: : 저는 당연히 증가하지 않을 것이라고 생각하고 사용해 왔는데....
: : 왜 이런건가요?
: : 사용 환경은 Borland Developer Studio 2006 입니다.

+ -

관련 글 리스트
73839 AnsiString 사용시 메모리 증가합니다. AnsiString 3693 2016/08/29
73860     Re:AnsiString 사용시 메모리 증가합니다. 3544 2016/09/21
73861         Re:Re:AnsiString 사용시 메모리 증가합니다. 송신영 3711 2016/09/22
73853     Re:AnsiString 사용시 메모리 증가합니다. 금목암[손효철] 3729 2016/09/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.