You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by br...@apache.org on 2002/03/10 18:20:27 UTC
cvs commit: apr/tables apr_tables.c
brianp 02/03/10 09:20:26
Modified: . CHANGES
tables apr_tables.c
Log:
Optimized away the initialization of newly allocated table
elements to NULL in table_push(), because this data always
gets overwritten immediately after the table_push() call.
Also eliminated the zero-fill of bytes that are immediately
overwritten in the branch of apr_array_push() that resizes
the array.
Revision Changes Path
1.235 +4 -0 apr/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apr/CHANGES,v
retrieving revision 1.234
retrieving revision 1.235
diff -u -r1.234 -r1.235
--- CHANGES 9 Mar 2002 19:26:13 -0000 1.234
+++ CHANGES 10 Mar 2002 17:20:26 -0000 1.235
@@ -1,5 +1,9 @@
Changes with APR b1
+ *) Small table performance optimization: eliminate the
+ zero-fill of newly allocated elements when expanding
+ a table's size. [Brian Pane]
+
*) Allow APR to install its generated libtool(s) via the
--with-installbuilddir option (defaults to ${datadir}/build).
[Justin Erenkrantz]
1.24 +22 -3 apr/tables/apr_tables.c
Index: apr_tables.c
===================================================================
RCS file: /home/cvs/apr/tables/apr_tables.c,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- apr_tables.c 13 Feb 2002 17:57:12 -0000 1.23
+++ apr_tables.c 10 Mar 2002 17:20:26 -0000 1.24
@@ -128,7 +128,26 @@
int new_size = (arr->nalloc <= 0) ? 1 : arr->nalloc * 2;
char *new_data;
- new_data = apr_pcalloc(arr->pool, arr->elt_size * new_size);
+ new_data = apr_palloc(arr->pool, arr->elt_size * new_size);
+
+ memcpy(new_data, arr->elts, arr->nalloc * arr->elt_size);
+ memset(new_data + arr->nalloc * arr->elt_size, 0,
+ arr->elt_size * (new_size - arr->nalloc));
+ arr->elts = new_data;
+ arr->nalloc = new_size;
+ }
+
+ ++arr->nelts;
+ return arr->elts + (arr->elt_size * (arr->nelts - 1));
+}
+
+static void *apr_array_push_noclear(apr_array_header_t *arr)
+{
+ if (arr->nelts == arr->nalloc) {
+ int new_size = (arr->nalloc <= 0) ? 1 : arr->nalloc * 2;
+ char *new_data;
+
+ new_data = apr_palloc(arr->pool, arr->elt_size * new_size);
memcpy(new_data, arr->elts, arr->nalloc * arr->elt_size);
arr->elts = new_data;
@@ -331,10 +350,10 @@
if (t->a.nelts == t->a.nalloc) {
return NULL;
}
- return (apr_table_entry_t *) apr_array_push(&t->a);
+ return (apr_table_entry_t *) apr_array_push_noclear(&t->a);
}
#else /* MAKE_TABLE_PROFILE */
-#define table_push(t) ((apr_table_entry_t *) apr_array_push(&(t)->a))
+#define table_push(t) ((apr_table_entry_t *) apr_array_push_noclear(&(t)->a))
#endif /* MAKE_TABLE_PROFILE */