Author: sewardj
Date: 2008-02-07 11:48:24 +0000 (Thu, 07 Feb 2008)
New Revision: 7372

Log:
Be somewhat more efficient when the element type is very small (eg char).



Modified:
   branches/DATASYMS/coregrind/m_xarray.c


Modified: branches/DATASYMS/coregrind/m_xarray.c
===================================================================
--- branches/DATASYMS/coregrind/m_xarray.c      2008-02-05 20:07:23 UTC (rev 
7371)
+++ branches/DATASYMS/coregrind/m_xarray.c      2008-02-07 11:48:24 UTC (rev 
7372)
@@ -118,7 +118,18 @@
          vg_assert(!xa->arr);
       if (xa->totsizeE > 0)
          vg_assert(xa->arr);
-      newsz = xa->totsizeE==0 ? 2 : 2 * xa->totsizeE;
+      if (xa->totsizeE == 0) {
+         /* No point in having tiny (eg) 2-byte allocations for the
+            element array, since all allocs are rounded up to 8 anyway.
+            Hence increase the initial array size for tiny elements in
+            an attempt to avoid reallocations of size 2, 4, 8 if the
+            array does start to fill up. */
+         if (xa->elemSzB == 1) newsz = 8;
+         else if (xa->elemSzB == 2) newsz = 4;
+         else newsz = 2;
+      } else {
+         newsz = 2 * xa->totsizeE;
+      }
       if (0) 
          VG_(printf)("addToXA: increasing from %ld to %ld\n", 
                      xa->totsizeE, newsz);
@@ -133,8 +144,13 @@
    }
    vg_assert(xa->usedsizeE < xa->totsizeE);
    vg_assert(xa->arr);
-   VG_(memcpy)( ((UChar*)xa->arr) + xa->usedsizeE * xa->elemSzB,
-                elem, xa->elemSzB );
+   if (xa->elemSzB == 1) {
+      /* calling memcpy is just stupid, hence */
+      * (((UChar*)xa->arr) + xa->usedsizeE) = * ((UChar*) elem);
+   } else {
+      VG_(memcpy)( ((UChar*)xa->arr) + xa->usedsizeE * xa->elemSzB,
+                   elem, xa->elemSzB );
+   }
    xa->usedsizeE++;
    xa->sorted = False;
    return xa->usedsizeE-1;


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to