데이터가 동적이거나 프로그램의 다른 영역에서 데이터를 전달해야 할 때 동적 컨테이너를 사용합니다.
1 - 동적 데이터 이웃에 대한 목록이 있다고 가정 해보십시오. 그들은 거리에 새로운 집을 짓고 목록에 남자를 추가해야하지만 15 명의 이웃에게 충분한 공간 만 할당했습니다. 이 동적 메모리를 사용하면 해당 컨테이너의 크기를 늘릴 수 있습니다. 그것이 실제로 어떻게 작동하는지는 아닙니다. 사실, 그것은 필요한 크기의 새로운 메모리 덩어리를 발견하고 오래된 컨테이너를 복사합니다.
또는 다른 예. 주소록을 추적하는 프로그램을 작성한다고 가정 해보십시오. 사용자 중 한 명이 10 개의 연락처를 가지고 있습니다. 다른 사용자는 법인이며이 주소록에 5 만 명의 직원이 모두 저장되어 있어야합니다. 연락처가 10 개인 사용자에게 50000 개의 공간을 할당하지 않으므로 필요한만큼 정확하게 할당합니다.
2 - 데이터 전달 정적 데이터를 할당하면 스택에 배치 된 다음 범위를 벗어난 후 액세스 할 수 없습니다. 따라서 배열을 생성하는 함수를 호출 한 다음 배열의 메모리 주소를 호출자에게 다시 전달하면 런타임 오류가 발생합니다. 이는 함수가 종료 된 후에 배열이 범위를 벗어나므로 스택에서 튀어 나왔기 때문입니다.
그러나 동적으로 할당하면 힙을 사용하고 해제하거나 프로그램을 종료 할 때까지 freeed가되지 않습니다. 따라서 배열의 시작 부분에 포인터를 놓고 원하는 시점까지 범위를 벗어나는 걱정없이 프로그램 전체에서 포인터를 사용할 수 있습니다.
"필요한 메모리 양이 적습니다"에서 "낮음"을 정의하는 좋은 방법이 있습니까? 나는이 문턱이 어디에 있는지 잘 모른다. – Mark
이 질문은 내가 묻기를 시도한 질문의 핵심에 실제로 도달합니다 (그러나 잘못했을 수도 있음). 그러나, 나는 여전히 낮은 메모리 임계 값을 고려해야 할 것에 관심이 있습니다. – Mark
@Mark : 스택에는 제한이 있습니다. 필요한 모든 메모리를 "저장할"수 있으면 "부족"할 수 있습니다. 그러나 모든 함수는 스택을 사용하므로 많은 함수가 메모리를 사용하면 스택 오버플로에서 실행할 수 있습니다. 때로는 동적 메모리를 사용하는 것이 더 안전합니다. 이것은 모두 프로그램이 필요로하는 메모리의 양과 OS가 작동 중인지에 달려 있습니다. 크거나 작은 것에 대한 규칙은 없습니다. – anizzomc