본문 바로가기

컴퓨터 과학 & 영상처리 관련/C / C++

포인터를 사용해서 얻을 수 있는 효과

1. 속도에서는 배열이, 메모리에서는 포인터가 효율적이다.

2. 함수에서 인자의 크기가 큰 경우, 값을 복사해서 넘기는 것보다 포인터를 활용하는 것이 효과적이다

3. 힙 엑세스와 함수의 인자로 배열, 문자열, 함수를 전달할 때에는 포인터를 활용한다.

4. 포인터 체인은 제거한다.

 

 

포인터의 중요 기능 중 하나가 힙 액세스다. 힙은 스택이다 데이터 세그먼트 처럼 변수 이름으로는 접근할 수 없고, 포인터로만 접근 가능하다. 모든 컴파일러가 malloc()을 지원하지 않을 경우가 있으므로 직접 주소를 이용하여 접근하거나 malloc()에 해당하는 함수를 만들어야 한다. 이 경우 연결 리스트 등과 같이 하면 될듯?

 

 

 

구조체를 인자로 줄때와 포인터를 인자로 줄때 명령어 수?

 

struct test t1;  //12바이트 짜리 구조체
void main()
{
void f1(struct test x);
f1(t1);
}

 

struct test t1; 
void f1(struct test *x);
void main()
{
struct test *p;
f1(p);
}

 

요거 하면 위에꺼는 12바이트 만큼 값을 f1에 전달해야 되는데

밑에꺼는 4바이트짜리 포인터만 넘기면 되는듯

그러다보니 어셈블러 코드 명령어 길이가 짧아진다한다

 

 

값을 변경할 수도 있게 되니깐 그걸 방지하고 값만 쓰고 싶으면

const test* x 로 인자를 전달하면 될듯

 

 

 

 

일반코드 

 포인터 체인 제거

 struct Point{

int x, y, z;

};

 

struct Obj{

Point *p1,*d;

};

 

void draw(struct Obj *a){

a->p1->x = 0;

a->p1->y= 0;

a->p1->z=0;

}

struct Point{

int x, y, z;

};

 

struct Obj{

Point *p1,*d;

};

 

void draw(struct Obj *a){

struct Point *k = a->p1;

k->x = 0;

k->y=0;

k->z=0;

}