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; }
|
'컴퓨터 과학 & 영상처리 관련 > C / C++' 카테고리의 다른 글
노트북과 i-2100 수행시간 비교..(시작 시간, 종료 시간 출력 등) (0) | 2012.06.03 |
---|---|
함수를 함수포인터로 전달시 (0) | 2012.06.01 |
int x = 0x10u; (0) | 2012.05.31 |
printf(),fprintf() 사용법 메모 (0) | 2012.05.27 |
4byte 변수 2진수 변환 (0) | 2012.05.21 |