/***ARM_Assembly***/
embedded recipes 198_Page
| Memory Map과 Symbol이야기
Symbol이란, Linker가 알아볼 수 있는 기본 단위인데, Link를 한 후에는 자신만의 주소를 갖게 되는 특별한 단위를 말합니다. Symbol의 이름은 그 Symbol이 갖는 메모리 영역의 시작 주소를 가리키는 Linker만의 pointer이기요. Debugging시에 이런 Symbol의 이름이 사용되기도 하지요. 이는 전역변수의 이름이나, 함수이름이 그 예이며, 아주 중요한 의미이니 꼭 새겨 두세요. Linker를 위해서 ELF object file내에는 symbol table이라는 것을 두는데, source code에 의하여 참조되는 symbol들의 이름과 위치 정보가 들어 있으며, 다른 file에서 정의된 Symbol을 가져다 쓰는 경우에는 그 해당 file에 Symbol이 없기 때문에, 그 object에서는 symbol table은 완전하지 못합니다. 다른 file에서 선언된 이런 완전치 못한 symbol들은 한 개의 object file내에서 모두 처리되지는 못하는데, 이런 불완전한 symbol들은 linker에 의해서 처리하여 다른 파일에 있는 symbol을 연결하여 사용할 수 있도록 만듭니다. 그러면 Symbol은 Memory에 실제로 적재되는 내용인가 하면? 그건 아니에요. Linker만이 이 Symbol을 참조하며, 실제로 Linker는 이른 Symbol들을 주소로 모두 변환해서 binary로 만들어 줍니다.
결국 symbol이란 자기 자신만의 주소를 갖는 단위를 symbol이라고 부르며, 저는 Global이라고 명명합니다. - 뭐, 저는 나름 그렇게 구분합니다만, 아니라고 굳이 주장 하시는 분들도 있습니다. 아, 그렇습니까 정도로 하고요- 또한 symbol이 아닌 것들은 자기 자신만의 주소를 갖지 못하는 것들을 말하며, 또한 Local이라고 명명합니다. 이것 참, 곤란한 구분이지만, 저는 편리하게 사용하고 있습니다.
Global에는 함수, 전역변수, static 변수가 Global로 분류될 수 있을 것 같고요, Local에는 나머지 Local 변수입니다.
다시 말해, 함수, 전역변수, static 변수는 자기만의 주소를 가지며, Local 변수는 자기만의 주소를 갖지 못합니다. Symbol들, 즉 Global들이 자기만의 고유 주소를 갖는 다는 것은 다른 파일의 함수들에서도 직접 access하여 만질 수 있는 이유이기도 합니다.
ADS등에서는 RW, ZI, RO 세가지 형태의 구분도 있을 수 있는데, 이런 구분은 어떻게 나뉠까 한번 생각해 보겠습니다. RW는 read-write 로서, 초기값이 있는 전역변수를 의미하고, ZI는 Zero-initialized로서, 초기값이 0인 전역변수를 의미하고, 마지막으로 RO는 Read only로서 수정이 불가능한 const 전역변수와 text인 code를 의미합니다. 한가지만 더 comment하자면 전역변수 중에서도 RO로 분류되는 변수가 있는데, 그 녀석들은 const로 선언된 data들입니다. const는 Read Only 변수기때문입니다.
main()함수 위에 선언되어 있는 전역변수들은 RW, ZI, RO등의 영역에 자리 잡으며, main()함수자체는 RO 영역에 자리 잡습니다. main()함수 내부의 Local 변수들을 잘 보시면, static이라고 선언되어 있는 변수들은 Local이긴 하지만, 앞서 변수의 scope에서 살펴 보았듯이, Global로 취급되므로 RW나 ZI에 속하게 되지요. 나머지 static이 아닌 Local 변수들은 label[100], pLabel은 satck에 pLabel은 heap에 자리 잡습니다.
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151202_[안향진]_ARM어셈블리_4__WINSOCK_3 (6) | 2015.12.03 |
---|---|
20151202 임현수 업무일지 ELF파일 포맷, 스레드 (4) | 2015.12.03 |
20151202 강동조 개인업무일지 (5) | 2015.12.02 |
20151202 윤재희 Memory Map과 Symbol 이야기, ELF format Object File에 관한 진실. -c option (기계어 세상), 멀티쓰레드 (5) | 2015.12.02 |
2015.12.02_[ARM #5]_ELFfile, [Winsock #3] socket_이량경 (4) | 2015.12.02 |
20151202 / ARM_5, winsock_3- 남수진 (5) | 2015.12.02 |
20151202 - 권오민 - ARM ASSEMBLY 5일차/WinSock 3일차 (4) | 2015.12.02 |
20151202 엄민웅 - arm 임베디드레시피 (교제 198~210) (5) | 2015.12.02 |