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
[73860] Re:AnsiString 사용시 메모리 증가합니다.
[] 3538 읽음    2016-09-21 23:02
지역변수를 선언하면 메모리에 어떻게 위치하는지 알아보십시오.
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 3691 2016/08/29
73860     Re:AnsiString 사용시 메모리 증가합니다. 3538 2016/09/21
73861         Re:Re:AnsiString 사용시 메모리 증가합니다. 송신영 3706 2016/09/22
73853     Re:AnsiString 사용시 메모리 증가합니다. 금목암[손효철] 3721 2016/09/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.