读书人

这些人是如何跟踪代码的关于new

发布时间: 2012-03-03 15:33:04 作者: rapoo

这些人是怎么跟踪代码的,关于new
c++中的new


别的编译器不知道, vc的new的内部操作:(来自网文)


new->malloc->HeapAlloc->VirtualAlloc->驱动程序的_PageAlloc。




我就不明白,这些人是怎么跟踪获得的,,

我也看按F11,死活看不到这些函数,以下是部分代码:

C/C++ code
int main(){    int *p=new int(10);    delete p;    return 0;}//跟踪进去看到的:void *__CRTDECL operator new(size_t size) _THROW1(_STD bad_alloc)        {       // try to allocate size bytes        void *p;        while ((p = malloc(size)) == 0)           //看到malloc 了 。。。。。。。。。。。。。进入malloc:extern "C" _CRTIMP void * __cdecl malloc (        size_t nSize        ){        void *res = _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);   //看到的是这个函数_nh_malloc_dbg    !!!!进入_nh_malloc_dbg:extern "C" void * __cdecl _nh_malloc_dbg (        size_t nSize,        int nhFlag,        int nBlockUse,        const char * szFileName,        int nLine        ){        int errno_tmp = 0;        void * pvBlk = _nh_malloc_dbg_impl(nSize, nhFlag, nBlockUse, szFileName, nLine, &errno_tmp);  //看到函数_nh_malloc_dbg_impl 进入函数_nh_malloc_dbg_impl :extern "C" static void * __cdecl _nh_malloc_dbg_impl (        size_t nSize,        int nhFlag,        int nBlockUse,        const char * szFileName,        int nLine,        int * errno_tmp        ){        void * pvBlk;        for (;;)        {            /* do the allocation             */            pvBlk = _heap_alloc_dbg_impl(nSize, nBlockUse, szFileName, nLine, errno_tmp);   //看到函数_heap_alloc_dbg_impl进入函数_heap_alloc_dbg_impl:




HeapAllo函数,我就没看到在哪里,

我的机子是win7 64位,编译器是2008 ,

不知道怎么回事??

是我的方法错了吗


正确的方法是什么啊




[解决办法]
不是所有的函数都有源代码。如果系统API(以及更深层调用)的源代码也都给你,Windows就成开源的了。
[解决办法]
在crt原代码的目录搜索_heap_alloc_dbg_impl
[解决办法]
win7 + vs2010:

new.cpp -> dbgmalloc.c -> dbgheap.c -> mlock.c

读书人网 >C语言

热点推荐