| [ CnUnix ] in KIDS 글 쓴 이(By): Lucifer (Satan) 날 짜 (Date): 1995년08월29일(화) 02시13분47초 KDT 제 목(Title): 간단한 문제의 답!! 이답은 다음과 같습니다.. (이건 우리 선배가 보낸 메일의 일부임) 에,,, 여러가지 가능성이 있는데 (1) 옛날옛날 cc에서는 void func(prototype)을 이해하지 못하여 컴파일이 되지 않는다. (2) 0 이라고 나오거나 이상한 숫자가 나온다. (buf[2..5]의 내용이 long으로 casting 된 내용, 아마도 대개 0으로 되어있을것임 (경험상)) (3) (2)의 답은 특수한 컴퓨터나 컴파일러상에 해당되며 현재 흔히 쓰는 Workstation에서는 4Byte 단위로 자료 접근이 이루어지게 된다(alignment) 따라서, 위의 lvar = ... 문장에서는 alignment 때문에 이 경계를 걸쳐 addressing 을 할 수 없다. | buf V +---+---+---+---+---+---+---+---+---+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |... +---+---+---+---+---+---+---+---+---+ ^ ^ | | +- lvar casting-+ 이런 현상이 발생하고, 이때 사용자는 "bus error"라는 친숙한 에러 메세지를 경험하게 된다. (2)의 답이 나오는 경우느 4byte로 alignment가 이루어지지 않을 경우. -- 아마.. 실제 수행을 해보면 대부분의 경우 (3)번과 같이 "bus error"라는 메시지가 나오면서 죽을 겁니다.. 그러니까.. 김경철님의 답이 정답이라고 할수가 있겠죠.. 컴파일 할때.. -misalign 이라는 옵션을 사용하면 문제없이 수행이 됩니다.. (직접 해봤음..) 아~~ cc 에는 이런 옵션이 있지만.. gcc에는 없는듯 합니다.. (자세히 찾아보지는 않았음..) 참 재밌는 문제죠?? 그럼 이만.. -- 밤이다. 하늘은 푸르다 못해 농회색으로 캄캄하나 별들만은 또렷또렷 빛난다. 침침한 어둠뿐 만 아니라 오삭오삭 춥다. 이 육중한 기류속에 자조하는 한 젊은이가 있다. 그를 나라고 불러두자.... - 별똥 떨어진데.. - |