2012-07-16 5 views
0

C에서 STL map 객체를 생성한다고 가정하십시오. 즉, map<string,char>mymap``$입니다. 이제이 객체에 메모리가 어떻게 할당되는지 알고 싶습니다. 혼란스러운 점은 동적 할당이없고 이전에 컨테이너의 크기를 알 수 없다는 것입니다. 그래서, 객체가 어디에 그리고 어떻게 할당되는지 mymap?C++ STL 객체에 대한 메모리 할당

+0

물론 동적 할당이 필요합니다. 물론 이동을하지 않아도되지만 삽입을 시작한 후에는 분명히 있습니다. 그것은 단지 클래스 안에 있습니다. – Jon

답변

1

그럼, 개체 mymap에 메모리가 할당 된 위치와 방법은 무엇입니까?

모든 표준 컨테이너의 기본 할당자는 std::allocator이며, 여기서 컨테이너는 메모리를 가져오고 메모리가 완료 될 때까지 해제됩니다. 사용자 정의 할당자를 사용할 수 있으며 원할 경우 모든 할당 및 할당 해제를 추적 할 수 있습니다.

3

은 물론 거기에는 동적 할당을하지 않습니다, 그러나 그것은 후드입니다. std::map은 일반적으로 트리로 저장되므로 새 객체가 삽입 될 때마다 새 노드가 할당됩니다. 역동적으로. new을 명시 적으로 쓰지 않았다고해서 그것이 두포에서 발생하지 않는다는 것을 의미하지는 않습니다.

std::map의 소멸자에서 노드가 자동으로 삭제됩니다. 그러나 노드가 동적으로 할당 된 객체를 포함하면 노드가지도에서 삭제되지 않습니다.

+0

후드 아래에 메모리가 동적으로 할당 된 경우 메모리가 후드 아래에 또한 확보된다는 사실을 알려주십시오. – nirprat

+0

@nirprat 예, 마지막 구문을 읽습니다. –