본문 바로가기
Ghost의 Linux C Note(노트)/Ghost의 Linux C언어 메모리 영역 확인

이상한 나라의 memmory?~~~

by dark ghost 2012. 5. 21.
728x90
반응형

메모리 영역 확인.

 

1. 위 소스는 메모리에 저장 될때 각 각 영역이 다르게 들어가는 것을 확인하기 위해 짠소스이다.

*cp = 'b';

2. 포인터형 cp 에 b를 문자를 넣는데 이 부분이 Linux와  visual studio의 컴파일에서 차이가 난다. 그 이유는 *cp가 메모리의 code 영역에 직접적으로 쓸려고 하기 때문에 안되는 것인데 원래 code영역은 읽기만 되는 영역이어서 쓰기가 안되는 것이 당연한 것이다. 그러나 visual studio에서는 쓰는게 가능 하다.

 

3. 위 그림에서 printf문이 2개가 출력 된것은 볼 수 있는데 그 다음 printf문이 안되는 것을 볼수 있다. *cp = 'b'; 이 구문 때문에 segementation fault 라는 오류가 뜨는데 쓸수 없는 메모리의 code 영역에 쓸려고 하니 세그먼트화 오류가 뜨는 것이다. code 영역은 읽기만 되는 영역인데 강제로 쓸려고 하니 이런 오류가나는 것이다.

 4. 위 그림은 같은 파일을 Dos command 창에서 컴파일을 시킨 것인데, 메모리 주소가 Linux에서 컴파일 시켰을때와 다른 것을 볼 수있으며, Linux 에서는 segementation fault 라는 오류를 볼 수없다. 그럼 어떻게 생각 해야 할까? ㅎㅎ그렇다 visual studio 에서는 code 영역에도 쓸수가 있다. 

728x90
반응형

댓글