ID:               32727
 Comment by:       ale at FreeBSD dot org
 Reported By:      cws at miraclenet dot co dot th
 Status:           Open
 Bug Type:         Feature/Change Request
 Operating System: FreeBSD
 PHP Version:      5.*, 4.*
 New Comment:

Can you try the following patch and tell me the results and which
FreeBSD version you are using?

--- ext/standard/php_smart_str.h.orig    2009-07-14 14:08:07.000000000
+0200
+++ ext/standard/php_smart_str.h 2009-07-14 14:08:12.000000000 +0200
@@ -30,12 +30,14 @@

 #define smart_str_0(x) do {                                           
                                         \
         if ((x)->c) {                                                 
                                                 \
+                (x)->a = (x)->len; \
+                SMART_STR_DO_REALLOC(x, 0); \
                 (x)->c[(x)->len] = '\0';                              
                                         \
         }                                                             
                                                                 \
 } while (0)

 #ifndef SMART_STR_PREALLOC
-#define SMART_STR_PREALLOC 128
+#define SMART_STR_PREALLOC 1048576
 #endif

 #ifndef SMART_STR_START_SIZE


Previous Comments:
------------------------------------------------------------------------

[2007-06-05 08:37:30] runner at protom dot org

I hope this patch to be taken in main

------------------------------------------------------------------------

[2005-04-19 02:48:30] cws at miraclenet dot co dot th

I forget to mension that the previous result is 
from my patched version.
The result of unpatch one is

c...@t42# ./php test_serialize.php
version:4.3.11
Length: 2798041
Serialize time:  elapse(2.554760)

------------------------------------------------------------------------

[2005-04-19 02:36:12] cws at miraclenet dot co dot th

No it don't help me to speed up my test code.
This is the result

c...@t42$ ./php test.php
Content-type: text/html
X-Powered-By: PHP/5.1.0-dev

<PRE>version:5.1.0-dev
Length: 2798041
Serialize time:  elapse(2.136879)

c...@t42$ /usr/local/bin/php test.php
<PRE>version:4.3.11
Length: 2798041
Serialize time:  elapse(0.200818)

The test code and data can be download at
http://freebie.miraclenet.co.th/tmp/test_serialize.tgz

The test data may seem too extreme (an array of 2.8M) but it is the one
that our customer really use.

------------------------------------------------------------------------

[2005-04-16 16:38:42] sni...@php.net

Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip

PHP 5.1-dev has got some optimizing done in this part, see if it's any
better (without your patch of course)


------------------------------------------------------------------------

[2005-04-16 13:39:18] cws at miraclenet dot co dot th

This is a patch 

t42# diff -u ext/standard/php_smart_str.h /home/cws/php_smart_str.h
--- ext/standard/php_smart_str.h        Wed Apr 16 16:12:37 2003
+++ /home/cws/php_smart_str.h   Sat Apr 16 18:27:30 2005
@@ -32,6 +32,10 @@
 #define SMART_STR_PREALLOC 128
 #endif

+#ifndef SMART_PTR_MAX_PREALLOC
+#define SMART_PTR_MAX_PREALLOC 1048576
+#endif
+
 #ifdef SMART_STR_USE_REALLOC
 #define SMART_STR_REALLOC(a,b,c) realloc((a),(b))
 #else
@@ -42,8 +46,11 @@
        if (!d->c) d->len = d->a = 0; \
        newlen = d->len + n; \
        if (newlen >= d->a) {\
-               d->c = SMART_STR_REALLOC(d->c, newlen +
SMART_STR_PREALLOC + 1, what); \
-               d->a = newlen + SMART_STR_PREALLOC; \
+               size_t pre_alloc = newlen *2;\
+               if ( pre_alloc > SMART_PTR_MAX_PREALLOC ) { pre_alloc =
SMART_PTR_MAX_PREALLOC; }\
+               if ( pre_alloc < SMART_STR_PREALLOC) { pre_alloc =
SMART_STR_PREALLOC; }\
+               d->c = SMART_STR_REALLOC(d->c, newlen + pre_alloc + 1,
what); \
+               d->a = newlen + pre_alloc; \
        }\
 }

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/32727

-- 
Edit this bug report at http://bugs.php.net/?id=32727&edit=1

Reply via email to