대게 일반적으로 2차원 배열보다는 1차원 배열을 사용하는 것이 더 빠릅니다. 왜냐하면, 1차원 배열의 값들은 메모리 블록들이 서로 인접한 위치에 저장되어 있어 프로세서가 보다 효율적으로 접근하여 사용할 수 있기 때문입니다. 반대로 2차원 배열의 값들은 메모리 들록들이 서로 인접한 위치에 저장되어 있지 않고, 힙 영역의 전체에 흩어져 있을 수 있으므로 프로세서가 1차원 배열보다 효율적으로 접근하기 어려울 수 있습니다.
즉, 2차원 배열보다 1차원 배열이 더 좋은 이유는 '오버헤드가 발생하지 않는다.'는 것입니다. 2차원 배열은 다차원으로 구성된 배열이므로 세로로 위치한 인자값를 읽을 때 내부적으로 메모리 포인터가 가로로 위치한 1차원 배열을 찾을 때 보다 건너뛰어야 하는 값이 더 크기 떄문입니다. 다음은 C++에서 1차원 배열 및 2차원 배열 선언하고 초기화하는 방법의 예입니다.
#include <iostream>
int main()
{
// Declare and initialize a 1D array with 5 elements
int a1[5] = {1, 2, 3, 4, 5};
// Declare and initialize a 2D array with 2 rows and 3 columns
int a2[2][3] = { {1, 2, 3}, {4, 5, 6} };
// Access an element of the 1D array
std::cout << a1[2] << std::endl; // Output: 3
// Access an element of the 2D array
std::cout << a2[1][2] << std::endl; // Output: 6
}
물론 1차원 배열과 2차원 배열의 성능 차이가 배열의 크기가 작을 경우에는 별로 중요하지 않습니다. 아울러 두 배열이 가지고 있는 유형과 크기, 또 어느 곳에서 코드가 실행되느냐 등 다른 간접적인 영향에 따라서 배열의 성능에 영향을 미춥니다.
속도와 성능을 위해 늘 항상 1차원 배열을 써야되는 것은 옳지 않은 생각이므로, 성능을 최적화하려고 시도하기보다는 필요한 순간 및 적절한 시점에 가장 적합한 데이터 구조를 사용하는 것이 가장 올바릅니다. 그럼에도 불구하고 코드의 성능을 측정해서 '극한의 이득을 추구하겠다!' 하시는 분들은 프로파일러 기능을 이용하는 것이 가장 좋은 방안이라고 생각합니다.
출처 : https://copynull.tistory.com/100
'공부 > 기타' 카테고리의 다른 글
나누기 연산자는 왜 다른 연산자에 비해 느릴까? (0) | 2022.12.22 |
---|---|
float이 빠를까?, double이 빠를까? (0) | 2022.12.22 |
32비트 시스템과 64비트 시스템의 차이 (0) | 2022.09.30 |
HCI와 UX (0) | 2018.09.27 |
1. Python (0) | 2018.01.11 |