C++ new operator
luyued 发布于 2011-01-12 05:50 浏览 N 次void *__CRTDECL operator new(size_t size)
........
while ((p = malloc(size)) == 0) //可见C++中也是调用malloc分配空间
extern "C" _CRTIMP void * __cdecl malloc ( size_t nSize)
{
//extern "C" c语言中声明的malloc函数
void *res = _nh_malloc_dbg(nSize, _newmode, _NORMAL_BLOCK, NULL, 0);
extern "C" void * __cdecl _nh_malloc_dbg
调用 pvBlk = _heap_alloc_dbg(nSize, nBlockUse, szFileName, nLine);
extern "C" void * __cdecl _heap_alloc_dbg(
int nBlockUse,
const char * szFileName,
int nLine
)
{//extern "C" c语言中声明的malloc函数
long lRequest;
size_t blockSize;
int fIgnore = FALSE;
_CrtMemBlockHeader * pHead; //空间块的头部
void *retval=NULL;
.....
//计算空间的大小
blockSize = sizeof(_CrtMemBlockHeader) + nSize + nNoMansLandSize;
pHead = (_CrtMemBlockHeader *)_heap_alloc_base(blockSize);
然后调用HeapAlloc函数分配空间
.....
if (_pFirstBlock)
_pFirstBlock->pBlockHeaderPrev = pHead;
else
_pLastBlock = pHead;
//插入一个链表中,可以方便管理,插在链表头
pHead->pBlockHeaderNext = _pFirstBlock;
pHead->pBlockHeaderPrev = NULL;
pHead->szFileName = (char *)szFileName;
pHead->nLine = nLine;
pHead->nDataSize = nSize; //需要分配空间大小
pHead->nBlockUse = nBlockUse;
pHead->lRequest = lRequest;
_pFirstBlock = pHead;
memset((void *)pHead->gap, _bNoMansLandFill, nNoMansLandSize);
memset((void *)(pbData(pHead) + nSize), _bNoMansLandFill, nNoMansLandSize);
memset((void *)pbData(pHead), _bCleanLandFill, nSize);
MSN空间完美搬家到新浪博客!
上一篇:去汽車旅館跟我上床? 下一篇:通灵王
相关资讯
- 06-30· 引用 (原创)陌上花.赏菊
- 06-21· “感动南京”人物谢二喜
- 06-21· 男士服饰搭配的基本原则
- 06-21· 程式内衣简介
- 06-21· 搭配点评 无论你身材、肤
- 06-21· 品牌内衣
- 06-21· 红脸蛋与绿西瓜
- 06-19· [神马]【2011-03-03】外贸童
- 06-19· 济南小商品 济南大明湖东
- 06-19· 妒
图文资讯
最新资讯
- 06-19· 2011年03月24日
- 06-19· 一个小小的纹身
- 06-19· 女装,女鞋,超值店
- 06-19· 谈谈购房体会
- 06-19· [转载]中医肾病用药体会
- 06-19· 我的读书心得体会
- 06-19· [转载]学习精细化管理写了
- 06-19· 谈谈拜《楞严经》的体会
- 06-18· 上海基本药物增补高价外
- 06-18· 辉瑞与百时美施贵宝叫停