독개

C언어 #메모리(실습)

by #독개#

C언어 #메모리(실습)


메모리에 쓰이는 값들은 전부 16진수로 표기된다 (디버깅시) 실제로는 2진수 쓰겟지?

1)

a. main함수 불러올때 Stack공간에 이함수에 필요한 크기를 Stack영역에 저만큼(붉은색 사이) 할당했다고 볼수있지

b. int test[5]; 로 배열 공간 4바이트씩 5개 총 20바이트를 할당했는데 내부적으로 test에 할당받은 곳의 시작주소(0x0035fd90)만 할당해주고

   따로 메모리에 어떠한 값도 넣어주지 않는다. 

이게 확인 해보니까 이미 main함수를 불러올때 stack공간을 할당받고 각각 안에 필요한 변수들의 주소를 이미 다지정 해주네

그러니까 stack공간 할당받을때 안에들어있는거에 대한 거 전부 계산해서 각각 공간의 주소들을 다준다는거지

즉 변수선언 한곳에 가야만 주소를 할당해주는게 아니라는거다

이미 선언한것들을 다보고 공간 파악한다음 주소로 다할당해주는거지 디버깅에서 한칸한칸 내려오면서 선언할때 주소를 주는게아니라

 

2)

a. Stack에선 높은주소에서 낮은 주소로 쓴다고 했는데 그럼 [02 00 00 00] [ 01 00 00 00] 이렇게 순서가 될지 알았는데 그게아니다!

   아! Stack공간을 할당받을땐 밑에서부터 채워지는데 할당받은 공간에 값을 쓸대는 순차적(낮은주소->높은주소)으로 쓰는구나

3)

a) 우선 숫자든,문자든 전부다 16진수의 값이 들어간다는걸 알수있다.

b) 리틀엔디안 방식을 볼수있는데 우리가 265를 16진수로 표현하면 109로 4바이트로 00/00/01/09 이렇게 표현이된다

   그런데 위에 메모리에보면 09/01/00/00 이 되어있다. 즉 우리는 뒤에서부터 읽어야 한다. 

   (순서는 뒤에서부터 읽지만 각 바이트 단위에선 거꾸로 읽으면안된다. 00/00/10/90 이렇게 읽으면 안된다는 거지)

c) 마지막 파란박스를 보면 여러개를 알수있다 

   1. a = 61 문자도 아스키로 전화해서 16진수로 넣구나!

   2. 61,62,63,64 (a,b,c,d)이렇게 들어가는구나

   3. test[4] = "abcd"; 하니까 꽉차서 뒤에 00 null값이 들어갈수가 없구나

d) int ct; 를 선언했지만 선언은 선언일뿐이므로 &c 에다가 주소값은 할당할지언정 값을 넣은것은 없구나

4)

a) ct = 0; 을 해줘서 값을 초기화 해줘야 이제서야 값을 넣구나

b) 메모리에서 8byte의 공간(초록테두리)만큼 띄우는구나 (대충 찾아보니 최적화를 위해서라고함)

 

이제 retrurn을 만나서 함수가 끝나면 스택영역에서 이 공간은 시스템에 반환하겠지(사라지겠지)

'🔥 프로그래밍 학습 > C언어' 카테고리의 다른 글

C언어 #메모리(이론)  (0) 2020.05.14
C언어 #배열  (0) 2020.05.14

블로그의 정보

독한 개발자

#독개#

활동하기