YonSei

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ YonSei ] in KIDS
글 쓴 이(By): halee (아기도깨비맧)
날 짜 (Date): 1997년09월01일(월) 18시57분22초 ROK
제 목(Title): [Info] Sementation fault & Bus Error



  포인터를 쓰인 프로그램인 경우.
  아무리 깨끗하게 프로그램을 짜도, Bus Error나 Sementation fault가 나죠.

  많은 경우, 기냥 포기하고 넘어가는 게. 정신 건강상 좋은데요.
  상용화 시킬 프로그램이라면. 그런 error는 용납할 수 없죠.

  아하... 여기서 기냥 넘어가는 건. "깨끗하게 프로그램을 짠"경우에만 해당하구요.
  뭐. array나 pointer size를 넘어가는 값을 assign한다던가.
  null pointer에 값을 준다던가.. 한 경우라면.. 
  절대로 용서한다던가.. 넘아가면 안되죠.   
  그건, 프로그래머의 수치라고 할 수 있죠. ^^

  요 근래. Sementation fault나 Bus error이야기가 심심찮게 올라와서.
  몇가지 포인터에 관한 이야기를, 적든지 옮겨오든지 합니다.

  *--------------
어떤 컴퓨터들은 데이터 타입에 따라서
저장하는 메모리 어드레스에 제약을 주는 수가 있습니다.

즉, char 형은 한 바이트 짜리이므로 모든 어드레스에
저장할 수 있지만 int형 같은 경우 2바이트 또는 4바이트인데
이 때 이 데이터가 저장되는 어드레스는 항상 짝수 내지는
4의 배수에 해당하는 어드레스만 쓰도록 되어 있죠.

만약 정수 데이터를 홀수 어드레스에 저장하려 하면
bus error가 납니다.

보통은 char형 포인터를 통해 지정된 홀수 어드레스에
정수값을 기록하려고 했을 때 많이 나타납니다.

그리고 이 에러는 도스 환경에서는 접할 수 없는 에러죠.

또한 에러가 화면에 출력되는 시점이 에러가 발생한
위치와 달라서 디버그가 상당히 힘듭니다.

에러 난 부분에 집착하지 마세요...
  *-------------
덧붙여 세그멘테이션 폴트에 대해 조금 이야기하면 
unix에서 virtual memory는 code 세그먼트, heap 세그먼트, stack세그먼트 
등의 몇개의 세그먼트로 나뉩니다. 

virtual address space의 크기가 2G라고 했을때 
0~2G 의 연속된 주소가 이러한 세그먼트 단위로 관리가 되게 되는데 
세그멘테이션 폴트는 말 그대로 이러한 세그먼트 range를 벗어난 것이죠. 
NULL pointer 에 값을 때려 넣을려고 할때를 가정해 보면 
pointer는 0을 가르치고 있는데 
virtual address에서 0번지는 code세그먼트에 속해 있죠. 
따라서 여기다 값을 쓰려고 하면 
OS는 수행하고 있는 프로그램이 세그먼트 violation을 했다고 
SEGV signal을 보내고 프로세스를 kill하는 것이죠.   
  *--------------- 

  여기서 Null pointer assign 같은 경우는 programmer의 잘못이라고 할 수 있지만.
  홀수 어드레스에 정수값을 넣는 경우는.. 참.. 황당하죠.
  그 정도는 알아서 해 주면 좋을텐데.. 싶기도 하고..

  하지만 어떻게 하겠어요. 프로그램이 죽는데... 고쳐야죠. 뭐.
  만일. 뽈뜨가 나던지. 에라가 나던지. 
  나 혼자 쓸 test program이라면.. 기냥.. 참고 지내시구요.
  아니라면.. "man mallopt"해서 한 번 보세요.
  제 후배가 알아낸 건데... 기냥 뽈뜨랑 에라를 없애주더라구요.

  하하.. 이것도 다들 아시는 거면.. 어떻하지용?

  @ 이런거.. 공짜로 갈쳐줘도 되나. 후배한테 맞을지도 몰라...
  @ 하하.. 울 보드에도.. 이런 글을 올라오게 되는군...


  
-------------
우리의진실은무엇일까?인생은우리의꿈을두고텔레비젼9시뉴스와서점진열대를덮는월간
지들과거리를방황하는낯모를패션들과함께다른강물로흘러간다.거리한구석에서천천히망
가져가는공중전화부스들과건전지빠진장난감같은이웃집여자들과함께...이제우리에게남
은진실은강박관념과같은사소한취미와습관들뿐이다....          [전경린의소설에서] 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.