2013-07-08 2 views
0

C++에서 delete[] 연산자는 배열을 삭제합니다. 할당자가 배열을 추적하기 때문에 배열의 길이에 액세스 할 수 있습니다.C++ 플랫 배열과 다차원 배열 메모리 풋 프린트

평평한 1 차원 배열이 다차원 배열보다 적은 메모리를 차지한다는 의미입니까?

Object** c을 할당하면 할당자는 Object* c (2 차원 배열과 동일한 수의 요소가 있음)을 할당하는 동안 첫 번째 차원과 두 번째 차원의 길이를 저장하지만 길이는 하나만 저장합니다 ?

답변

1

당신이 할 경우이 :

Object **c = new Object*[n]; 
for (size_t i=0; i!=n; ++i) { 
    c[i] = new Object[m]; 
} 

그런 다음 일반적으로이 일보다 더 많은 메모리를 취할 것입니다 :

Object *c = new Object[n*m]; 

당신이 언급 단지 이유.

모든 메모리 할당에는 일정량의 오버 헤드가 있습니다. 요소의 수를 유지해야 할뿐만 아니라 메모리 할당 자 자체에 오버 헤드가 있습니다. 또한 각 행에 대한 모든 추가 포인터에 대해 더 많은 메모리가 필요합니다.

메모리를 없애면 메모리를 적게 사용할 수 있습니다. 힙이 조각난 경우, 한 개의 큰 메모리 덩어리를 찾으려면 운영 체제에서 더 많은 메모리를 할당해야하지만 배열이 작은 조각으로 나뉘어지면 조각이 조각난 힙의 구멍에 들어갈 수 있습니다.

+0

더 많은 포인터가 분할 될 수 있습니다. – Immueggpain

+0

답변 해 주셔서 감사합니다! – untitled

관련 문제