결국, extern 이란 function 선언같은경우는 common 이 없으니까 둘째 치고 (common 은 weak symbol이라고 보면 됨. 필요충분이라고 보고 있는데 밴다이어그램적으로 바깥에 있는새끼를 아직까지 상상해본적이 없음)
여튼,
glob 은 strong 이니까 좀 언어를 명확히해서
local 하지 않은 symbol들 중에서
comm 과 undef 의 구분이 필수적이냐? 하는거임.
일단 좌 와 우 의 차이는 확실히 존재하는데,
좌는 undef 로 우리가 원하는 그 전역변수인 environ 을 정확히 가져오고,
우는 comm 인데, 해당 전역변수와 무관하게 weak symbol 즉 자기자신에게 변수가 배정되어서, 0이라는 값을 배정받는다.
왜 이런 일이 발생할까?
나는 comm 에 놓여진 저 데이터 사이즈에 그 원인이 있다고 생각함.
그러니까 아마 내 생각은 environ 이라는게 libc.so 에서 매크로로 선언되어있으며
무언가 char ** 의 사이즈의 object가 아닐거같다는 생각이야.
subroutine 혹은 퓨어한 주소일거같은데,
내 예상은 퓨어한 주소임.
근데 이거 좀 이상한게 내가 직접 어셈블리에 코딩할때에는 뭔가 퓨어한 주소는 앞에다가 . 붙이지 않으면 문제생기는거같았는데
내 착각이었나
댓글 0