这些人是怎么跟踪代码的,关于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