/* ** Change the size of an existing memory allocation */ static void *memsys3Realloc(sqlite4_env*pEnv, void *pPrior, int nBytes){ int nOld; void *p; if( pPrior==0 ){ return sqlite4_malloc(pEnv, nBytes); } if( nBytes<=0 ){ sqlite4_free(pEnv, pPrior); return 0; } nOld = memsys3Size(pPrior); if( nBytes<=nOld && nBytes>=nOld-128 ){ return pPrior; } memsys3Enter(); p = memsys3MallocUnsafe(nBytes); if( p ){ if( nOld<nBytes ){ memcpy(p, pPrior, nOld); }else{ memcpy(p, pPrior, nBytes); } memsys3FreeUnsafe(pPrior); } memsys3Leave(); return p; }
//重新分配*pPrior指向的内存空间大小为n字节。 static void *memsys3Realloc(void *pPrior, int nBytes) { int nOld; void *p; if( pPrior==0 ) { //原来的内存为0,则直接分配n字节 return sqlite3_malloc(nBytes); } if( nBytes<=0 ) { sqlite3_free(pPrior); //释放从由sqlite3Malloc获得的内存空间 return 0; } nOld = memsys3Size(pPrior); //获取未完成分配的内存空间 if( nBytes<=nOld && nBytes>=nOld-128 ) { return pPrior; } memsys3Enter(); p = memsys3MallocUnsafe(nBytes); //申请n字节的内存空间 if( p ) { if( nOld<nBytes ) { memcpy(p, pPrior, nOld); } else { memcpy(p, pPrior, nBytes); } memsys3FreeUnsafe(pPrior); } memsys3Leave(); return p; }
/* ** Free memory. */ static void memsys3Free(void *pPrior){ assert( pPrior ); memsys3Enter(); memsys3FreeUnsafe(pPrior); memsys3Leave(); }