링커 스크립트를 공부중에 질문입니다.
글쓴이: 소맛라면 / 작성시간: 금, 2005/09/30 - 10:30오전
floating_point = 0; SECTIONS { .text : { *(.text) _etext = .; } _bdata = (. + 3) & ~ 4; .data : { *(.data) } }
Quote:
위에서 `floating_point' 심볼은 0으로 정의된다. `_etext' 심볼은 마지막 `.text' 입력 섹션 뒤의 주소로 정의된다.
`_bdata' 심볼은 `.text' 출력 섹션 뒤에서 4 바이트 경계로 정렬된 주소로 정의된다.
http://www.gnu.or.kr/manual/release/ld/ld-mahajjh/ld_3.html#SEC47
여기에 설명이 잘 나와있길래..공부중에 잘 모르는 부분이 생겨서
질문 드립니다..
다른건 이해가 가는데
Quote:
요 부분이 이해가 가질 않습니다..
`_bdata' 심볼은 `.text' 출력 섹션 뒤에서 4 바이트 경계로 정렬된 주소로 정의된다.
_bdata = (.+3) & ~4 가 어떻게 4바이트 정렬인지 잘 모르겠습니다..
설명좀 해주세요...처음에는 4비트 정렬인줄할고..그냥 넘어갔는데..
다시 읽어 보니 4바이트 더군요...
감사합니다..
Forums:
4를 이진수로 표시하면 100입니다. 따라서 첫번째 자리와 두번째 자리가
4를 이진수로 표시하면 100입니다. 따라서 첫번째 자리와 두번째 자리가 0이면, 4의 배수가 되는 셈입니다. 한 번 볼까요?
즉, 어떤 수에 4를 invert 시킨 수(~4)를 AND하면, 4의 배수로 (수치가 잘릴 수도 있음) 바뀝니다.
3을 더한 것은 주어진 수보다 같거나 큰 4의 배수로 만들기 위함입니다. 볼까요?
"_bdata = (. + 3) & ~ 4"를 위를 보며 생각하시면 해결되리라 생각합니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[code:1](4 + 3) & ~4 = 4
도대체 이해가 잘 안되는군요..;;
4+3이면 7 이진수로 0111
~4는 앞부분 잘라버리고 뒤에 4자리만 1011
두수를 & 하면 0011
십진수로 3입니다..
제 계산 법이 틀렸나요???;;
아직도 이해가 잘 안되는군요..;;
에효~ㅜ..ㅜ
무엇을 위해 사는가..
[quote="소맛라면"][code:1](4 + 3)
~4 라면 이진수로 나타내었을 때, 제일 작은 두 자리 (1의 자리와 2의 자리) 만 0이고 나머지는 1입니다. 따라서 AND를 취하면 제일 뒤 두 자리만 00이 되겠죠.
위에 말씀하신 4의 경우를 보면:
4+3이면 7, 이진수로 0111
그 다음, 0111 & ~4 를 하면 0100 이 되고, 이 수는 십진수로 4가 되는 겁니다.
----
Let's shut up and code.
아직 이해가 안되서 다시 질문 드립니다..이진수의 마직막 4자리만
아직 이해가 안되서 다시 질문 드립니다..
이진수의 마직막 4자리만 따지면 1111 경우 8421이되고 ->15가 되져
4가 이진수가 되려면 0100이 되야 하지 않나요??
이를 반전 하면 1011로 되야 한다고 생각하는데...;;;
어느 부분에서 재가 잘못 생각 하고 있는지 모르겠군요...;;
흐미...;;
~4가 ~3이 되야 하는것 아닌지..;;
무엇을 위해 사는가..
~4가아니라 -4 아닌가요?11111100 (-4)&
~4가아니라 -4 아닌가요?
11111100 (-4)
& 뒤에 나와야할 값은 ~4가 아니라 -4이어야할 것 같습니다.
---
http://coolengineer.com
혹시 이부분을 잘못 적으신건 아닌가요
열정은 남자의 미래다! - suki1978 style, free style
_bdata = (. + 3) & ~ 4;
이 아니라
_bdata = (. + 3) & ~ 3;
이 맞지 않을까요. 계산상 4배수가 딱 맞아 떨어지구요
링커스크립트 메뉴얼에서 보면 ALIGN에 대한 함수 설명에서 다음과 같은 부분이 있습니다
ALIGN(exp) 는 다음과 동일하다
( . + exp - 1 ) & ~ ( exp - 1 )
이때 exp는 2의 몇제곱 형식이어야만 한다
결국 이 부분 다음 영역은 4의 배수로 정렬할 때 사용하는 지시어 인거 같구요.
# 링커스크립트를 공부하면서 검색하다가 위의 부분이 좀 이상한거 같아서 적어봤습니다
혹시 잘못된거면 말씀해주세요~ ㅎ
열정은 남자의 미래다! - suki1978 style, free style
댓글 달기