한 행의 길이가 일정하지 않을 때, 포인터 배열이 2차원 배열에 비해 효율적인 경우가 많다.
2차원 배열보다 포인터 배열이 효율적인 이유
2차원 배열은 n x m 의 고정된 크기 형태를 가질 수 있다.
이는 반대로 말하면, 각 배열을 정보로 가득 채우지 못하면, 남는 잉여 메모리가 발생할 수 있다는 것이다.
반면 포인터를 배열에 담게 되면, 각 정보가 필요한 만큼의 메모리만 사용할 수 있는 것이다.
하지만, 포인터 자체도 메모리를 사용하므로(8바이트) 항상 2차원 배열보다 효율적이라는 것은 아니다.
도식으로 이해하기
2차원 배열
1
2
3
4
5
6
7
8
9
10
11
char arr[3][10];
메모리 구조
┌──────────┬──────────┬──────────┐
│ H e l l o \0 □ □ □ │
├──────────┼──────────┼──────────┤
│ W o r l d \0 □ □ □ │
├──────────┼──────────┼──────────┤
│ A \0 □ □ □ □ □ □ □ │
└──────────┴──────────┴──────────┘
// 모든 행이 10일 경우 -> 낭비되는 메모리 존재
포인터 배열
1
2
3
4
5
6
7
8
9
char *arr[3];
arr (포인터 배열)
┌───────┬───────┬───────┐
│ * ───┼──▶ H e l l o \0
│ * ───┼──▶ W o r l d \0
│ * ───┼──▶ A \0
└───────┴───────┴───────┘
// 포인터 배열은 필요한 만큼만 사용하므로 효율적임
댓글 남기기