2014년 1월 29일 수요일

포인터와 배열은 어떻게 다른가 in assembly level

포인터와 배열은 다들 알다시피 비슷하지만 다른데, 어셈블리 레벨에서 보면 더욱 자세히 와닿을 수 있다.

다음은 간단하게 배열과 포인터를 각각 사용하는 c 코드와 그로부터 만들어진 어셈블리 코드이다.


arr.s의 6, 7라인. 그리고 22라인을 보자.
어레이의 경우는 리터럴의 시작주소가 곧 자신의 위치이다.
따라서 접근을 할 때, $a와 같이 해당 심볼의 위치를 바로 가져온다.

ptr.s에서는 4,5,10,11라인. 그리고 26라인을 보자.
반면, 포인터는 리터럴의 시작주소를 값으로 가진다.
따라서 접근 시, a(%rip)와 같이, rip relative 방식으로 해당 변수의 '값'을 가져온다.

댓글 없음:

댓글 쓰기