본문 바로가기
IT_Study/CS_Study

[Computer Architecture] (6) Array vs Pointer

by 두번째얼룩 2024. 4. 28.

Array를 접근할 때는 Array의 base address와 Array의 element size 그리고 index가 필요하다. 이를 이용하면 아래와 같이 계산할 수 있다.

A[i] = The base address of A + element siz * i(index )

 

pointer는 메모리 주소를 직접 가리키는 것으로 아래와 같이 pointer를 통해 바로 접근 가능하다.

// declare point p;
long *p;
p = 1  // address p = 1
a = *p // a = M[1]

 

아래와 같이 동일한 동작을 Array를 사용하는 Code와 Pointer 를 사용하는 Code를 비교해 보자. 

Array vs pointer

Array로 만든 Loop은 Index 계산을 하기 위한 수식들이 포함되어 있고, Pointer는 처음 시작할 때 한 번만 수행하도록 되어 있다. 두 차이는 for loop이 int i를 사용하느냐 주소 값을 사용하느냐에 있다. 주소 값을 바로 사용하므로 주소의 offset만 계속 더해주면 바로 접근이 가능하다.

이런 작업은 Compiler가 최적화를 수행하여, 실제 Instruction으로 만들어질 때는 오른쪽과 같이 pointer를 사용하는 형태로 만들어 줄 수 있다. 

 

댓글