API介绍

初始化分配内存子系统

 int sqlite3MallocInit(void){
  if( sqlite3GlobalConfig.m.xMalloc==0 ){/*没有分配*/
    sqlite3MemSetDefault();
  }
  memset(&mem0, 0, sizeof(mem0));/*分配内存*/
  if( sqlite3GlobalConfig.bCoreMutex ){/*核心锁*/
    mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);/*分配一个互斥锁*/
  }

  if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100/*szScratch每个缓冲区的大小*/
      && sqlite3GlobalConfig.nScratch>0 ){
      /*nScratch缓冲区的数量*/
    int i, n, sz;
    ScratchFreeslot *pSlot;/*空闲缓冲区的指针*/
    sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);/*四舍五入*/
    sqlite3GlobalConfig.szScratch = sz;/*重新获得的值给szScratch*/
    pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;/*将sqlite3GlobalConfig头指针给pSlot*/
    n = sqlite3GlobalConfig.nScratch;/*缓冲区数量给变量n*/
    mem0.pScratchFree = pSlot;/*pSlot给mem0的空闲缓冲区地址*/
    mem0.nScratchFree = n;/*缓冲光的个数nScratchFree是n*/
    for(i=0; i<n-1; i++){/*求出最后一个缓冲区的地址*/
      pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
      pSlot = pSlot->pNext;
    }

    pSlot->pNext = 0;
    mem0.pScratchEnd = (void*)&pSlot[1];/*mem0的最后地址pSlot*/
  }
  else
    {/*空间不够全部清空为0*/
    mem0.pScratchEnd = 0;
    sqlite3GlobalConfig.pScratch = 0;
    sqlite3GlobalConfig.szScratch = 0;
    sqlite3GlobalConfig.nScratch = 0;
    }

  if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
      || sqlite3GlobalConfig.nPage<1 )
      {/*pPage页缓存没有分配地址 或者地址小于1 nPage页数小于一页 */
    sqlite3GlobalConfig.pPage = 0;
    sqlite3GlobalConfig.szPage = 0;
    sqlite3GlobalConfig.nPage = 0;
  }
  return sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
}

分配内存空间的函数:

    void *sqlite3Realloc(void *pOld, int nBytes)
    void *sqlite3_realloc(void *pOld, int n)
    void *sqlite3DbRealloc(sqlite3 *db, void *p, int n)
    void *sqlite3DbMallocZero(sqlite3 *db, int n)
    void *sqlite3DbMallocRaw(sqlite3 *db, int n)
    int sqlite3DbMallocSize(sqlite3 *db, void *p)

得到分配内存大小

    void *sqlite3DbMallocZero(sqlite3 *db, int n)
    void *sqlite3DbMallocRaw(sqlite3 *db, int n)

具体实例:
分配内存就是使用内存和释放内存,该例程是类似于了alloc(),因为目的不是为了内存被长期执行例子是为了用了很久的内存,大内存,临时内存的数据结构,该数据结构不能满足嵌入式处理器的堆栈
void *sqlite3ScratchMalloc(int n)
void sqlite3ScratchFree(void *p){/*释放缓冲区*/
释放内存的函数
sqlite3_release_memory(allocSize);//释放内存
sqlite3ScratchFree(void *p)/*释放缓冲区*/

results matching ""

    No results matching ""