본문으로 바로가기

해커스쿨.Section 14

category Study/system 2017. 11. 5. 19:28


Section 14


각 영역의 메모리 주소 값 확인해보기




http://g0pher.tistory.com/268


이번 강의는 위 페이지에 나오는 첫번째 사진을 보며 이해하면 좋다



main함수의 주소를 살펴보면 0x00000000에 가까운 주소가 아니다.

코드영역의 앞쪽에는 가상메모리가 텅 비어있는 상태로 존재한다. 이러한 영역은 접근시 오류가 발생한다.



이번에는 전역변수와 정적변수가 초기화된 데이터의 주소를 살펴보면 main보다 약간 뒤쪽에 존재한다.




이번에도 전역변수와 정적변수를 선언하지만 이번엔 초기화 하지 않은 상태일 때의 주소를 살펴보자


초기화된 데이터보다 초기화 되지 않은 데이터가 더 뒤쪽에 형성됨을 알 수 있다.

또한 초기화된 데이터와는 다르게 정적변수가 더 앞쪽에 형성됨을 알 수 있다.




이번에는 동적할당을 통해 힙 영역의 주소를 알아보자


초기화 되지 않은 데이터의 조금 뒤쪽에 형성되어있음을 알 수 있다





이번에는 공유라이브러리의 주소를 알아보자


힙과는 좀 멀리 떨어져 있음을 알 수 있다.


맨 위의 주소에 있는 사진을 보면 알 수 있듯이 힙은 낮은주소에서부터 높은주소로 채워져 나간다


즉, 힙이 할당될 때마다 채워져 나가기 위한 예약 공간이 필요하기 때문에 라이브러리 영역과 멀리 떨어져있다




스택의 주소를 살펴보면 이번에도 라이브러리 주소와 거리가 꽤 멀다


이번에도 링크속 사진을 보면 알 수 있듯이 스택의 경우 높은 주소부터 낮은주소방향으로 쌓이기 때문이다




스택영역의 뒤쪽에는 무엇이 있을까?


스택 영역 뒤쪽 주소에 직접 접근해보면 Segmentation fault 에러가 뜨면서 프로그램이 종료된다.


이 영역은 커널영역으로 운영체제의 작동에 매우 중요한 영역이기 때문에 일반적인 프로그램에서는


직접적으로 접근할 수 없다.






위의 내용들을 간략하게 정리해보면 아래와 같다.





'Study > system' 카테고리의 다른 글

해커스쿨.Section 17  (0) 2017.11.07
해커스쿨.Section 15  (0) 2017.11.07
해커스쿨.Section 12  (0) 2017.11.02
해커스쿨.Section 11  (0) 2017.11.02
해커스쿨.Section 9  (0) 2017.11.02