You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2011/02/11 11:52:05 UTC

svn commit: r1069743 - /subversion/trunk/subversion/libsvn_subr/svn_string.c

Author: ivan
Date: Fri Feb 11 10:52:05 2011
New Revision: 1069743

URL: http://svn.apache.org/viewvc?rev=1069743&view=rev
Log:
Optimize svn_string_t creation by allocating memory for svn_string_t 
structure and data in one chunk.

* subversion/libsvn_subr/svn_string.c
  (svn_string_ncreate): Allocate memory for svn_string_t and data in one 
   chunk.

Modified:
    subversion/trunk/subversion/libsvn_subr/svn_string.c

Modified: subversion/trunk/subversion/libsvn_subr/svn_string.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_subr/svn_string.c?rev=1069743&r1=1069742&r2=1069743&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_subr/svn_string.c (original)
+++ subversion/trunk/subversion/libsvn_subr/svn_string.c Fri Feb 11 10:52:05 2011
@@ -135,9 +135,18 @@ create_string(const char *data, apr_size
 svn_string_t *
 svn_string_ncreate(const char *bytes, apr_size_t size, apr_pool_t *pool)
 {
+  void *mem;
   char *data;
+  svn_string_t *new_string;
+
+  /* Allocate memory for svn_string_t and data in one chunk. */
+  mem = apr_palloc(pool, sizeof(*new_string) + size + 1);
+  data = (char*)mem + sizeof(*new_string);
+
+  new_string = mem;
+  new_string->data = data;
+  new_string->len = size;
 
-  data = apr_palloc(pool, size + 1);
   memcpy(data, bytes, size);
 
   /* Null termination is the convention -- even if we suspect the data
@@ -145,8 +154,7 @@ svn_string_ncreate(const char *bytes, ap
      call.  Heck, that's why they call it the caller! */
   data[size] = '\0';
 
-  /* wrap an svn_string_t around the new data */
-  return create_string(data, size, pool);
+  return new_string;
 }
 
 



Re: svn commit: r1069743 - /subversion/trunk/subversion/libsvn_subr/svn_string.c

Posted by Philip Martin <ph...@wandisco.com>.
Julian Foad <ju...@wandisco.com> writes:

> On Fri, 2011-02-11, ivan@apache.org wrote:
>> URL: http://svn.apache.org/viewvc?rev=1069743&view=rev
>> Log:
>> Optimize svn_string_t creation by allocating memory for svn_string_t 
>> structure and data in one chunk.
>> 
>> * subversion/libsvn_subr/svn_string.c
>>   (svn_string_ncreate): Allocate memory for svn_string_t and data in one 
>>    chunk.
>
> Nice optimization!

It does save a function call, but the memory pools mean that there is no
memory saving.  It's probably more of an optimization when pool
debugging is enabled :)

-- 
Philip

Re: svn commit: r1069743 - /subversion/trunk/subversion/libsvn_subr/svn_string.c

Posted by Julian Foad <ju...@wandisco.com>.
On Fri, 2011-02-11, ivan@apache.org wrote:
> URL: http://svn.apache.org/viewvc?rev=1069743&view=rev
> Log:
> Optimize svn_string_t creation by allocating memory for svn_string_t 
> structure and data in one chunk.
> 
> * subversion/libsvn_subr/svn_string.c
>   (svn_string_ncreate): Allocate memory for svn_string_t and data in one 
>    chunk.

Nice optimization!

- Julian