2012-01-16 5 views
1

간단한 로직을 따르는 메모리 풀 구현을 만들 수 있습니까?C++의 메모리 풀에 대한 질의

1 - n 바이트의 메모리 풀을 할당합니다.

2 - 수정 된 new(); 메모리를 할당하지 않는 함수/연산자는 메모리 풀의 시작 부분에 대한 포인터 만 가져옵니다. 이 방법으로 객체는 오버 헤드없이 동적으로 생성됩니다.

3 - 메모리 풀은 낮은 실행되면, 그것은 왼쪽과 새로운 메모리 풀

4 할당 무엇 할당을 취소 -에 따라 메모리를 데리러 남아있는 최초의 메모리 풀에서 만든 객체를 자신의 크기. 첫 번째 풀에 할당 된 내용과 부족한 상태로 되돌아온 내용은 ​​삭제시 개체에 의해 복원됩니다.

내 걱정은 내가 할당 된 것보다 작은 메모리 풀을 삭제하는 방법을 모른다는 사실에 주로 관한 것이고, 메모리 풀 개체의 끝에 남아있는 것 외에 OS 헤더도 있습니다. 풀에 할당 된 첫 번째 객체 앞에있는 메모리 풀의 경우 어떤 메모리가 유출되지 않았는지 확인하기 위해 어떤 접근 방식이 필요합니까? 과도한 메모리 풀을 삭제해도 할당 된 객체가 삭제되지 않으며 메모리 풀 조각의 헤더가 안전하게 제거된다는 점.

감사합니다.

EDIT : 메모리 풀로 메모리를 할당하고 수명이 다른 개체에 의해 메모리가 할당되도록하려는 의도입니다. 이것이 가능하다면 ...

+1

할당 한 것 이외의 다른 것을 할당 해제 할 수 없습니다. 그것이 완전히 사용되지 않을 때까지 그냥 오래된 경기장을 떠나십시오. –

+1

태그가 "C"인 이유는 무엇입니까? "C"에는 "new()"함수가 없으며이 문제에서 C++과 완전히 다릅니다. –

+0

Point (3)은 모든 포인터를 풀로 무효화합니다. –

답변

3

무엇을 검색해야 하는지를 알고 싶다면 첫째, 이것은 경기장 할당 자 (의견에 언급 된 바와 같음)처럼 들립니다.

경기장은 모든 것을 한꺼번에 분해하려고 할 때만 유용합니다. 재사용을 위해 삭제 된 객체에서 메모리를 회수하려는 경우, 결국 자신의 힙을 경기장 꼭대기에 씁니다. 마지막 객체가 할당 해제 될 때까지 무대 클립을 계속 유지하려는 경우 참조를 사용하여 관리 할 수 ​​있습니다.

둘째, 메모리를 할당하기 위해 알고있는 유일한 일반적인 방법은 추후 이동이 가능하지 않고 (예 : realloc) 메모리 맵을 사용하는 것입니다. 이는 플랫폼에 따라 다릅니다.