2009년 6월 29일 월요일

복합 데이터형

스트링의 배열을 생성한다면 메모리의 주소는 어떻게 되는가?

image

위와 같은 코드를 실행하였을 때 AaA, BbB가 저장되는 메모리의 주소는 아래와 같았다.

image

그렇다면 이미 메모리에 길이가 정해진 후 AaA에 있는 문자열 대신 길이가 긴 문자열을 사용한다면 어떻게 되는가?

해당 명령을 실행하면 아래와 같이 AaA가 저장된 0x0012FEBC의 메모리 값이 주소 값으로 바뀌는 것을 볼 수 있었다.

image

위와 같이 전혀 다른 내용으로 변화된다. 그렇다면 실제 데이터는 어디에 있는가? 변경된 데이터는 해당 주소에 있는 값을 주소로 한 0x00399518에서 발견할 수 있었다

image

위의 경우는 아래의 코드에서 보는 것과 같이 기존 길이보다 새로 할당된 크기가 크다면 새로 메모리값을 assign하면서 발생하는 경우이다.

image

image

자동공간, 정적공간, 동적공간

자동공간: 함수 안에서 정의되는 보통의 변수

정적공간: 프로그램이 실행되는 동안에 지속적으로 존재하는 공간

동적공간: 자유 공간 또는 힙(Heap) 이라고 불림
new와 delete 연산자를 사용하여 관리
자동변수와 정적 변수가 사용하는  메모리와 분리되어 있다

image

위와 같이 코드를 짰다고 가정해보자. 이 때 위의 코드는 아래와 같은 어셈블리어로 변환된다

image

nOuter의 값은 메모리상에서 아래와 같이 확인이 가능하였다

image

댓글 없음: