What about sqlite3StackAllocZero and SQLITE_USE_ALLOCA?

pon., 7 paź 2019 o 20:51 Dominique Pellé <dominique.pe...@gmail.com>
napisał(a):

> Hi
>
> Below is a patch which avoids a dynamic
> allocation in vdbeSorterSort(...), using a local
> stack array instead (faster and smaller code).
> I assume that a local array of 64 pointers is small
> enough to be in the stack.
>
> Is this worth merging?
>
> $ fossil diff  src/vdbesort.c
> Index: src/vdbesort.c
> ==================================================================
> --- src/vdbesort.c
> +++ src/vdbesort.c
> @@ -1394,25 +1394,20 @@
>  ** SQLITE_OK if successful, or an SQLite error code (i.e. SQLITE_NOMEM) if
>  ** an error occurs.
>  */
>  static int vdbeSorterSort(SortSubtask *pTask, SorterList *pList){
>    int i;
> -  SorterRecord **aSlot;
> +  SorterRecord *aSlot[64] = { 0 };
>    SorterRecord *p;
>    int rc;
>
>    rc = vdbeSortAllocUnpacked(pTask);
>    if( rc!=SQLITE_OK ) return rc;
>
>    p = pList->pList;
>    pTask->xCompare = vdbeSorterGetCompare(pTask->pSorter);
>
> -  aSlot = (SorterRecord **)sqlite3MallocZero(64 * sizeof(SorterRecord *));
> -  if( !aSlot ){
> -    return SQLITE_NOMEM_BKPT;
> -  }
> -
>    while( p ){
>      SorterRecord *pNext;
>      if( pList->aMemory ){
>        if( (u8*)p==pList->aMemory ){
>          pNext = 0;
> @@ -1438,11 +1433,10 @@
>      if( aSlot[i]==0 ) continue;
>      p = p ? vdbeSorterMerge(pTask, p, aSlot[i]) : aSlot[i];
>    }
>    pList->pList = p;
>
> -  sqlite3_free(aSlot);
>    assert( pTask->pUnpacked->errCode==SQLITE_OK
>         || pTask->pUnpacked->errCode==SQLITE_NOMEM
>    );
>    return pTask->pUnpacked->errCode;
>  }
>
> Regards
> Dominique
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to