Named Heap ¸¸µé±â
 FrontPage|FindPage|TitleIndex|RecentChanges|UserPreferences E D R S P I M H RSS

MSNMessengerMSNP10ProtocolMathematics For 3D ProgrammingMy Macro »ç¿ë¹ýMyPortfolio › Named Heap ¸¸µé±â
<!> UnderConstruction

Contents:
1 °³¿ä
2 °ü·Ã¼­Àû
3 Áֿ丵ũ
4 LocalAlloc °ú new ÀÇ Â÷ÀÌ
4.1 CBroHeap Ŭ·¡½º ÄÚµå
4.2 Ŭ·¡½º¿ë CBroHeap
4.3 À̸§ ÀÖ´Â Èü ¸¸µé±â
4.4 µÎ Ŭ·¡½º°¡ ÇϳªÀÇ ÈüÀ» ÀÌ¿ëÇϱâ
4.5 ÀϹÝÇüÀÇ ÀÚ·áµµ Èü¿¡ »ç¿ëÇϱâ
5 ´Ù¿î·Îµå
6 °ü·Ã¸µÅ©


1 °³¿ä #



2 °ü·Ã¼­Àû #



3 Áֿ丵ũ #


4 LocalAlloc °ú new ÀÇ Â÷ÀÌ #


MSDN ÀÇ ÇØ´ç LocalAlloc ¼³¸íÀ» º¸½Ã¸é

Note The local functions are slower than other memory management functions and do not
provide as many features. Therefore, new applications should use the heap functions.

¶ó°í ½áÀÖ°í ±×·¡¼­ ºñÃßõÇÑ´Ù´Â ¸»ÀÌ ³ª¿À´Â°Å °°½À´Ï´Ù. ±×¸®°í ¸»¾¸ÇϽŴë·Î new ´Â malloc ¿¡ ÀÇÇØ ±¸ÇöµÇ¾îÀÖ°í Win32 ¿¡¼­ÀÇ CRT malloc ÇÔ¼ö´Â ´Ù½Ã return HeapAlloc( _crtheap, 0, size ); ÇÔ¼ö·Î ±¸ÇöµÇ¾ú½À´Ï´Ù. ù ÀÎÀÚÀÎ _crtheap Àº C ·±Å¸ÀÓ¿ë ±âº» default heap À» ÀǹÌÇÕ´Ï´Ù. LocalAlloc À» ¾²¸é ÀڽŸ¸ÀÇ ¸Þ¸ð¸® Èü¿¡´Ù¸¸ ÇÒ´çÇÏ´Ï Á» ´À·Áµµ ÅëÀÌ ²Ëá´Ù°í ³ª¿ÀÁö ¾Ê¾Ò´Âµ¥ ¹ÝÇØ _crtheap À̶ó´Â Èü¿¡´Ù°¡ ¸ðµÎ ³Ö°Ô µÇ´Ï ¾È±×·¡µµ ´Ù¸¥ ÀϹÝÀûÀÎ new È£Ãâ¿¡µµ _crtheap ±âº»ÈüÀ¸·Î ÇÒ´çµÇ¾î¼­ ²ËÂ÷°Ô µÇ´Â »óȲÀÌ ¹ß»ýµÈ µíÇÕ´Ï´Ù.

ÇØ°á ¹æ¹ýÀ¸·Î´Â ±×³É ±âÁ¸ ¼Ò½º¸¦ º¸Á¸Çϰųª (±ÍÂ÷´Ï½ºÆ®Ãßõ) ±»ÀÌ ±âº» ÈüÀ» »ç¿ëÇÏÁö ¾Ê°í ÀڽŸ¸ÀÇ ÈüÀ» »ç¿ëÇØº¸´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. new Çڵ鷯¸¦ ÀçÁ¤ÀÇÇØ¼­ ÀڽŸ¸ÀÇ ÈüÀ» »ç¿ëÇØ º¼ ¼ö ÀÖ°Ú°í¿ä. Àú °°Àº °æ¿ì °£´ÜÇÏ°Ô LocalHeap Ŭ·¡½º¸¦ ¸¸µé¾î´Ù°¡ ¾²°ï ÇÕ´Ï´Ù. (¹°·Ð ÀÌ·± ¾ÆÀ̵ð¾îÀÇ Ãâó´Â Advanced Windows NT ¸¦ ¾²½Å Á¦ÇÁ¸®¸®Ã³ ´ÔÀ» ÅëÇØ ¹è¿î°ÍÀ̰í¿ä.)

4.1 CBroHeap Ŭ·¡½º ÄÚµå #


//  BroHeap.h: interface for the CBroHeap class.
//
//  Bro's Local Heap Helper Class
//  by bro ( bro@jiran.com )
//  Jo kyung Min.
//  2002-03-28
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_BROHEAP_H__3CB0A950_D6F5_434A_AE15_CF52D59711A5__INCLUDED_)
#define AFX_BROHEAP_H__3CB0A950_D6F5_434A_AE15_CF52D59711A5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//===================================================================
//  Ŭ·¡½º : CBroHeap class
//  ¼³  ¸í : ·ÎÄà Èü °ü¸®¸¦ Á¦°øÇØÁÖ´Â º£À̽º ÅÛÇø´ Á¤Àû Ŭ·¡½º
//  _dwHeapId - »ý¼ºÇÒ Èü°ø°£ÀÇ À̸§ ( µðÆúÆ® : !bro )
//===================================================================
template class CBroHeap
{
    static HANDLE ms_hHeap;     // Èü ÇÚµé

    // Èü¿µ¿ª¿¡¼­ »õ·ÎÀÌ ¸Þ¸ð¸®¸¦ ÇÒ´çÇÏ´Â ÇÔ¼ö
    inline static void * Alloc( size_t size )
    {
        if( !ms_hHeap )
            ms_hHeap = HeapCreate( 0, 0, 0 );

        if( !ms_hHeap )
            return NULL;

        return HeapAlloc( ms_hHeap, 0, size );
    }

public:

    // ÇØ´ç ÁÖ¼Ò°¡ °ü¸®µÇ´Â Èü¿µ¿ª¾È¿¡¼­ À¯È¿ÇÑ ÁÖ¼ÒÀÎÁö ÆÇº°ÇÑ´Ù.
    static BOOL IsBadPtr( void* p )
    {
        return HeapValidate( m_hHeap, 0, p );
    }

    // C++ new/delete overloading
    void * operator new( size_t nSize )
    {
        return Alloc( nSize );
    }
    inline void * operator new( size_t nSize, LPCSTR lpszFileName, int nLine )
    {
        return operator new( nSize );
    }
    void* operator new[]( size_t nSize )
    {
        return Alloc( nSize );
    }

    void operator delete( void* p )
    {
        HeapFree( ms_hHeap, 0, p );
    }
    inline void operator delete( void* p, LPCSTR lpszFileName, int nLine )
    {
        operator delete( p );
    }
    void operator delete[]( void* p )
    {
        HeapFree( ms_hHeap, 0, p );
    }
};

// ÅÛÇø´ Á¤Àû ¸É¹ö º¯¼ö
template HANDLE CBroHeap<_dwHeapId>::ms_hHeap;


//===================================================================
//  Ŭ·¡½º : _c
//  ¼³  ¸í : ±âº»ÇüÀÚ·á (int, char µî) µµ BroHeap À» ¾µ ¼ö ÀÖµµ·Ï ·¡ÇÎÇÑ
//           ÅÛÇø´ ÇïÆÛ Ŭ·¡½º
//===================================================================
template struct _c : public CBroHeap<_dwHeapId>
{
    T t;
    T* operator &() { return &t; }
    operator T()    { return t; }
    operator T*()   { return &t; }
    T operator = ( T t2 ) { t = t2; return t; }
};

//===================================================================
//  Ŭ·¡½º : _p
//  ¼³  ¸í : _c°´Ã¼ÀÇ ¹¬½ÃÀû Æ÷ÀÎÅÍ Ä³½ºÆÃÀ» Áö¿øÇϱâ À§ÇÑ _c °´Ã¼
//           Æ÷ÀÎÅÍ ·¡ÆÛ Ŭ·¡½º
//===================================================================
template struct _p
{
    typedef _c* _pc;
    _pc p;
    _p( _pc pc ) { p = (_pc)pc; }
    _p( _c c )   { p = (_pc)&c; }

    T& operator [] ( int i ) { return p->t; }
    operator _pc() { return p; }
    _pc operator = (_pc p2) { p = p2; return p; }
    operator T*()  { return &p->t; }
};

#endif // !defined(AFX_BROHEAP_H__3CB0A950_D6F5_434A_AE15_CF52D59711A5__INCLUDED_)

4.2 Ŭ·¡½º¿ë CBroHeap #


CBroHeap À» »ó¼Ó¹Þ°í, default process heap new / delete ¾²µíÀÌ ¾²¸é µÈ´Ù.

class CObj : public CBroHeap<>
{
public:
    char x[10];
};

:

{
    :
    CObj * p = new CObj;
    delete p;
    :
}

4.3 À̸§ ÀÖ´Â Èü ¸¸µé±â #


À̸§¾ø´Â ÈüÀº ±âº»ÀûÀ¸·Î !bro ¶ó´Â À̸§À» °®°ÔµÇ´Â ÈüÀ¸·Î µÈ´Ù. ³ª¸¸ÀÇ À̸§À» °®´Â ÈüÀ» ¸¸µé¾îº»´Ù. DWORD ÀÇ id À̹ǷΠ4 ¹ÙÀÌÆ®ÀÇ ¹®ÀÚ¸¸À» Çã¿ëÇÑ´Ù.

class CObj : public CBroHeap<'mine'>
{
public:
    char x[10];
};

:

{
    :
    CObj * p = new CObj[30];
    delete[] p;
    :
}

4.4 µÎ Ŭ·¡½º°¡ ÇϳªÀÇ ÈüÀ» ÀÌ¿ëÇϱâ #


´ÜÁö »ó¼ÓÀ» °°Àº id ÀÇ ÈüŬ·¡½º¸¦ »ó¼Ó¹ÞÀ¸¸é µÈ´Ù.

class CObj1 : public CBroHeap<'mine'>
{
public:
    char x[10];
};

class CObj2 : public CBroHeap<'mine'>
{
public:
    char x[40];
};

// ÀÌÁ¦ CObj1 °ú CObj2 ÀÇ new/delete ´Â ¸ðµÎ °°Àº ÈüÀ» ¾´´Ù.

{
    :
    CObj1 * p1 = new CObj1;
    delete p1;
    CObj2 * p2 = new CObj2;
    delete p2;
    :
}

4.5 ÀϹÝÇüÀÇ ÀÚ·áµµ Èü¿¡ »ç¿ëÇϱâ #


_c ¶ó´Â ÇïÆÛ Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¸é µÈ´Ù.

_c * p = new _c[20];
strcpy( (char*)p, "aaa" );          // ¸í½ÃÀûÀ¸·Î (char*) ¸¦ ÇØÁÖ¾î¾ßÇÑ´Ù.
TRACE( "%s %c",(char*)p, p[0] );    // ¸í½ÃÀûÀ¸·Î (char*) ¸¦ ÇØÁÖ¾î¾ßÇÑ´Ù.

delete p;

¸¸ÀÏ _p ¸¦ ¾²¸é ¸í½ÃÀûÀÎ (char *) ¸¦ ¾ÈÇØÁ൵ µÈ´Ù.

_c* p = new _c[20];
_p* pr( p );                    // p ¸¦ ÂüÁ¶ ·¡ÇÎÇÑ pr À» »ý¼ºÇÑ´Ù.
strcpy( pr, "aaa" );            // ¸í½ÃÀûÀ¸·Î (char*) ¸¦ ¾ÈÇØµµ µÈ´Ù.
TRACE( "%s %c",pr, pr[0] );     // ¸í½ÃÀûÀ¸·Î (char*) ¸¦ ¾ÈÇØµµ µÈ´Ù.

delete[] p;

// (°³¼±ÀÇ ¿©Áö°¡ ÀÖ´Ù.)
// ¶Ç´Â delete[] (_c*)pr; Áö¿ï¶§´Â ¸í½ÃÀûÀ¸·Î ÇØÁÖ¾î¾ß ÇÑ´Ù.
// ÀÏ´Ü ¾²´Â µ¿¾È (char*) °°Àº ¸í½ÃÀû ij½ºÆÃÀ» ÇÏ´Â ÄÚµùÀÇ ³ë°í¸¦
// ´ú¾îÁشٴµ¥¿¡ ÀÇÀǸ¦ µÎ°í ÀÖ´Ù. ³ªÁß¿¡´Â delete ¿¡ ´ëÇØ¼­µµ
// Æ÷ÀÎÅÍ ·¡ÆÛ Ŭ·¡½º°¡ Á¦°øÇßÀ¸¸é ÇÏÁö¸¸ ºÒ°¡´ÉÇÒµí...


5 ´Ù¿î·Îµå #



6 °ü·Ã¸µÅ© #



SubCategoryCpp

EditText|FindPage|DeletePage|LikePages| Valid XHTML 1.0! Valid CSS! powered by MoniWiki