⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmem_impl.cpp

📁 跨平台C++基础库
💻 CPP
字号:

#include "MCRT/mtypes.h"
#include "MCRT/mmem_impl.h"
#include "mmem_list.h"

#include "ace/Synch.h"

#include <stdlib.h>
#include <string.h>

#ifdef M_MEM_TEST

MemTrace            s_memTrace;
ACE_Thread_Mutex    s_mutexList;

void* operator new( size_t nSize )
{
    void*   pBlock  =   ::malloc( nSize );

    return pBlock;
}

void* operator new[]( size_t nSize )
{
    void*   pBlock  =   ::malloc( nSize );

    return pBlock;
}

void* operator new( size_t nSize, const char* pFileName, mInt32 nLine )
{
    void*   pBlock  =   NULL;
    pBlock  =   ::malloc( nSize );

    if ( pBlock != NULL )
    {
        MemTraceNode*   pNode   =   (MemTraceNode*)::malloc( sizeof(MemTraceNode) );
        if ( pNode != NULL )
        {
            pNode->m_pBlock =   pBlock;
            pNode->m_nSize  =   nSize;
            ::strcpy( pNode->m_szFileName, pFileName );
            pNode->m_nLine  =   nLine;
            pNode->pNext    =   NULL;

            ACE_Guard< ACE_Thread_Mutex >   guard(s_mutexList);
            s_memTrace.insert( pNode );
        }
    }

    return pBlock;
}

void* operator new[]( size_t nSize, const char* pFileName, mInt32 nLine )
{
    void*   pBlock  =   NULL;
    pBlock  =   ::malloc( nSize );

    if ( pBlock != NULL )
    {
        MemTraceNode*   pNode   =   (MemTraceNode*)::malloc( sizeof(MemTraceNode) );
        if ( pNode != NULL )
        {
            pNode->m_pBlock =   pBlock;
            pNode->m_nSize  =   nSize;
            ::strcpy( pNode->m_szFileName, pFileName );
            pNode->m_nLine  =   nLine;
            pNode->pNext    =   NULL;

            ACE_Guard< ACE_Thread_Mutex >   guard(s_mutexList);
            s_memTrace.insert( pNode );
        }
    }

    return pBlock;
}

void operator delete( void* pBlock )
{
    if ( pBlock != NULL )
    {
        ACE_Guard< ACE_Thread_Mutex >   guard(s_mutexList);
        s_memTrace.erase( pBlock );

        ::free( pBlock );
    }
}

void operator delete[]( void* pBlock )
{
    if ( pBlock != NULL )
    {
        ACE_Guard< ACE_Thread_Mutex >   guard(s_mutexList);
        s_memTrace.erase( pBlock );

        ::free( pBlock );
    }
}

//avoid warning of compile
void operator delete( void* /* pBlock */, const char* /* pFileName */, mInt32 /* nLine */ )
{
}

//avoid warning of compile
void operator delete[]( void* /* pBlock */, const char* /* pFileName */, mInt32 /* nLine */ )
{
}

#endif //end M_MEM_TEST

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -