|
2008년 10월 05일
delete this; 라는 코드를 혹 보신적 있으신가요? 저는 최근 CWinThread 클래스를 사용하던 중 이 코드를 처음 봤는데요. delete this;를 통해 CWinThread 클래스의 객체가 메모리에서 해제 된 후에도 CWinThread 클래스의 멤버함수의 호출이 정상적으로 이루어지는 현상을 발견하였습니다. 물론 함수 내부의 변수에 접근할 때 Access violation 에러를 발생하며 프로그램이 종료되기는 했지만 말이죠 ~ 그럼 왜 이런 일이 가능했을까요? 객체가 메모리에서 해제 되면 당연히 클래스의 멤버에 접근할 수 없는 것 아니었나요?? 그럼 이 내용에 대해서 연구를 해보겠습니다. ![]() 그럼 과연 결과는 어떻게 나왔을까요? 아래 결과를 보시면 메모리가 해제 되었기 때문에 멤버변수인 m_iVal의 값은 쓰레기 값으로 체워졌지만 ShowData() 멤버 함수에 정상적으로 접근하여 각 변수의 값을 보여주고 있습니다. ![]() 위 설명을 간단히 프로세스가 메모리에 올라 갈 때 메모리 영역 단위로 나눈 그림으로 보면 아래와 같은데요. 아래 그림의 빨간 원안에 들어가 있는 영역들은 프로세스가 메모리에 올라 갈 때 함께 메모리에 올라가 프로세스가 종료 될 때 함께 메모리에서 내려오는 영역들입니다. ![]() ![]() ![]() ![]() ![]() 어때요?? 증명이 되죠?? ㅎㅎ 위 연구를 통해 클래스의 메모리 접근 메커니즘을 정리해 보면 가장 중요한 개념은 프로세스가 메모리에 올라갈 때 함께 올라가는 메모리 영역에 해당하는 데이터들이 무엇이고 프로세스가 메모리에서 내려갈 때 함께 내려가는 메모리 영역에 해당하는 데이터들이 무엇이냐는 것입니다. 데이터 영역과 코드 영역의 경우가 이에 해당하기 때문에 이 영역들에 위치하게 되는 데이터들은 언제든지 접근이 가능한 것이지요. 물론 위 ShowData()에서 봤던 것 처럼 이미 메모리에 올라와 있는 영역이라 할지라도 그 안에서 접근하는 데이터가 스택이나 힙영역에 있다면 이 영역에 해당하는 데이터가 메모리에 올라와 있지 않으면 Access 오류가 발생할 수 있다는 것입니다. 그럼 한가지 더 재미있는 결과를 보고 이번 포스팅을 마치도록 하겠습니다. ![]() ![]() 이 글과 관련있는 글을 자동검색한 결과입니다 [?]
|
ABOUT
![]() 새로운 도전을 위해 약 1년간 자리를 비웁니다. 그 동안 블로그에 방문해 주신 분들께 진심으로 감사드립니다. 1년 뒤 .NET 관련 양질의 정보를 가지고 돌아오겠습니다. by greenfrog 메모장
카테고리
최근 등록된 덧글
잘 봤습니다. 그런데 저 상태에서 하얀..
by 비니 at 07/24 안녕하세요. 내용이 좋아서 참고합니다... by 김현수 at 07/09 1년뒤....너무 멀군요... 도전 성.. by rince at 06/26 좋은 내용이네요 많은 도움이 되었습니다.. by 이준배 at 06/04 좋은 정보 감사합니다^^ by 코즈 at 06/03 사랑합니다 by 최곱니다 at 05/12 좋은정보 감사합니다. by 이창열 at 05/11 좋은 정보 잘보고갑니다 그리고 제가 .. by Cherry at 04/27 답글이 늦어서 죄송합니다. 요즘 이래저.. by greenfrog at 04/20 좋은 정보 잘보고 갑니다^^ 도움이 많.. by 토끼 at 04/15 좋은 정보 감사합니다. 다음에 써먹어야.. by neptunex at 03/26 ㅎㅎ 잘 찾아보면 재미있는 플러그인 많.. by greenfrog at 03/22 예전에는 일부러 에러내고 그거찾아가는.. by 규학 at 03/13 아 ~ 그 일이었군요 ^^ 글 잘 봤어요 .. by greenfrog at 02/21 하나은행과 정말 생동감 넘쳤지요 ^^ by rince at 02/20 rince님의 생동감 넘치는 하루가 궁금.. by greenfrog at 02/20 어제, 그제 정말 생동감 넘치는 하루.. by rince at 02/19 저도 짬 비릴때 고참들이 웃기면 그것 .. by greenfrog at 02/19 전 자주 웃는 편이지요 ^^; 군대에선 .. by rince at 02/18 저도 이 만화 보고 어쩜 저런 생각 없는 .. by greenfrog at 02/17 최근 등록된 트랙백
자바로 작성된 프로그램 단 한번만 실..
by Start!!! 제 취향이 Oddly Enough와 안성맞.. by Oddly Enough 2009년 보기 시작하는 미드 by Pell's seer Blog [포토] 국민 여러분, 떡국 드시고 .. by Green Monkey Blog** MARVEL MOVIES : 아이언 맨 by 잠보니스틱스 ▶◀ 최진실씨, 삼가 고인의 명복을 .. by ** MY's kitchen ** 재미로 해보는 MBTI 검사 by A2공간 - 도움되는 글을 쓰자 러시아 극우조직 스킨헤드를 파헤친 기자 by Oddly Enough [Sleeping Through My Fingers].. by 바람나무, 생각가는대로 구글 크롬 안내서의 작지만 큰 실수 by Oddly Enough PETA, 돼지학대 농장 잠입취재 by Oddly Enough 병쭈니의 생각 by chrisjun82's me2DAY 준이아빠의 생각 by kkh1030's me2DAY 안철수가 말하는 "현대의 인재에.. by loading... 100% 이전블로그
이글루 파인더
|