E D R , A S I H C RSS

Full text search for "HeapTrack"

Heap Track


Search BackLinks only
Display context of search results
Case-sensitive searching
  • MoreEffectiveC++/Techniques1of3 . . . . 15 matches
         class HeapTracked { // mixin class; keeps track of
          virtual ~HeapTracked() = 0;
         HeapTrack 적용은 간단하다. 왜냐하면, operator new와 operator delete가 실제 메모리 할당과 해제를 수행하고 list 클래스는 삽입, 지우기, 그리고 검색 엔진을 포함하기 때문이다. 자 여기 이런 내용의 적용에 관련한 내부 코드를 살피자.
         list<RawAddress> HeapTracked::addresses;
         // HeapTracked의 파괴자는 가상 클래스의 순수 가상 함수이다. (E14참고)
         HeapTracked::~HeapTracked() {}
         void * HeapTracked::operator new(size_t size)
         void HeapTracked::operator delete(void *ptr)
         bool HeapTracked::isOnHeap() const
         위에서 isSafeToDelete를 구현할때 다중 상속이나 가상 기초 함수으로 여러개의 주소를 가지고 있는 객체가 전역의 해당 함수를 복잡하게 할것이라고 언급했다. 그런 문제는 isOnHeap에서 역시 마찬가지이다. 하지만 isOnHeap는 오직 HeapTracked객체에 적용 시킨 것이기 때문에, dynamic_cast operatror를 활용으로 위의 문제를 제거한다. 간단히 포인터를 dynamic_cast 하는 것은 (혹은 const void* or volatile void* or 알맞는 것으로 맞추어서) 객체의 가장 앞쪽 포인터, 즉, 할당된 메모리의 가장 앞쪽에 주소를 가리키는 포인터를 의미한다. 그렇지만 dynamic_cast는 가상함수를 하나 이상 가지는 객체를 가리키는 포인터에 한해서만 허용 된다. isSafeToDelete함수는 모든 포인터에 관해서 가능하기 때문에 dynamic_cast가 아무런 소용이 없다. isOnHeap는 조금더 선택의 폭이 있어서 this를 const void*로 dynamic_cast하는 것은 우리에게 현재 객체의 메모리 시작점의ㅣ 포인터를 주게 된다. 그 포인터는 HeapTracked::operator new가 반드시 반환해야만 하는 것으로 HeapTrack::operator new의 처음 부분에 있다. 당신의 컴파일러가 dynamix_cast를 지원하면 이러한 기술은 이식성이 높다.
         이러한 클래스가 주어지고, BASIC 프로그래머는 이제 heap 에 할당하는 것을 추적할수 있는 능력을 클래스에게 부여 할수 있다. 추적을 원하는 클래스는 반드시 HeapTracked를 상속하도록 만든다. 예를들어서 우리가 Asset객체를 사용할때 해당 객체가 heap-base 객체인지 알고 싶다면 다음과 같이
         class Asset: public HeapTracked {
Found 1 matching page out of 7540 total pages (5000 pages are searched)

You can also click here to search title.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
Processing time 0.0075 sec