summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2015-04-16 13:11:54 +0300
committerDmitry Stogov <dmitry@zend.com>2015-04-16 13:11:54 +0300
commit05232cc810b39ff6f5a0307119bd76a548fe34be (patch)
treea9472d95840a65954cde301e94936763216fd50e
parent5275e5560bb186bc3950a0dbf15fe0e54ee4c6ec (diff)
downloadphp-git-05232cc810b39ff6f5a0307119bd76a548fe34be.tar.gz
Revert "Changed zend_smart_str allocation granularity to do the better job together with Zend MM and avoid useless calls to erealloc()." That commit significantly increased the code size because of intensive inlining and more expensive reallocation code.
This reverts commit 5275e5560bb186bc3950a0dbf15fe0e54ee4c6ec.
-rw-r--r--Zend/zend_alloc.c10
-rw-r--r--Zend/zend_alloc.h14
-rw-r--r--Zend/zend_smart_str.h17
3 files changed, 16 insertions, 25 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c
index 16fd42e80f..6701ca4902 100644
--- a/Zend/zend_alloc.c
+++ b/Zend/zend_alloc.c
@@ -287,6 +287,16 @@ struct _zend_mm_bin {
char bytes[ZEND_MM_PAGE_SIZE * 8];
};
+#if ZEND_DEBUG
+typedef struct _zend_mm_debug_info {
+ size_t size;
+ const char *filename;
+ const char *orig_filename;
+ uint lineno;
+ uint orig_lineno;
+} zend_mm_debug_info;
+#endif
+
struct _zend_mm_free_slot {
zend_mm_free_slot *next_free_slot;
};
diff --git a/Zend/zend_alloc.h b/Zend/zend_alloc.h
index 0cb3a71d34..6d89884f0d 100644
--- a/Zend/zend_alloc.h
+++ b/Zend/zend_alloc.h
@@ -50,20 +50,6 @@ typedef struct _zend_leak_info {
uint orig_lineno;
} zend_leak_info;
-#if ZEND_DEBUG
-typedef struct _zend_mm_debug_info {
- size_t size;
- const char *filename;
- const char *orig_filename;
- uint lineno;
- uint orig_lineno;
-} zend_mm_debug_info;
-
-# define ZEND_MM_OVERHEAD ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_debug_info))
-#else
-# define ZEND_MM_OVERHEAD 0
-#endif
-
BEGIN_EXTERN_C()
ZEND_API char* ZEND_FASTCALL zend_strndup(const char *s, size_t length) ZEND_ATTRIBUTE_MALLOC;
diff --git a/Zend/zend_smart_str.h b/Zend/zend_smart_str.h
index 4a37dd66f0..c18b133dfe 100644
--- a/Zend/zend_smart_str.h
+++ b/Zend/zend_smart_str.h
@@ -22,19 +22,14 @@
#include <zend.h>
#include "zend_smart_str_public.h"
-#define SMART_STR_OVERHEAD (ZEND_MM_OVERHEAD + _STR_HEADER_SIZE)
-
-#ifndef SMART_STR_PAGE
-# define SMART_STR_PAGE 4096
+#ifndef SMART_STR_PREALLOC
+#define SMART_STR_PREALLOC 128
#endif
#ifndef SMART_STR_START_SIZE
-# define SMART_STR_START_SIZE (256 - SMART_STR_OVERHEAD - 1)
+#define SMART_STR_START_SIZE 78
#endif
-#define SMART_STR_NEW_SIZE(newlen) \
- (((newlen + SMART_STR_OVERHEAD + SMART_STR_PAGE) & ~(SMART_STR_PAGE - 1)) - SMART_STR_OVERHEAD - 1)
-
#define smart_str_appends_ex(dest, src, what) \
smart_str_appendl_ex((dest), (src), strlen(src), (what))
#define smart_str_appends(dest, src) \
@@ -60,14 +55,14 @@ static zend_always_inline size_t smart_str_alloc(smart_str *str, size_t len, zen
newlen = len;
str->a = newlen < SMART_STR_START_SIZE
? SMART_STR_START_SIZE
- : SMART_STR_NEW_SIZE(newlen);
+ : newlen + SMART_STR_PREALLOC;
str->s = zend_string_alloc(str->a, persistent);
str->s->len = 0;
} else {
newlen = str->s->len + len;
if (newlen >= str->a) {
- str->a = SMART_STR_NEW_SIZE(newlen);
- str->s = (zend_string *) perealloc2(str->s, _STR_HEADER_SIZE + str->a + 1, _STR_HEADER_SIZE + str->s->len + 1, persistent);
+ str->a = newlen + SMART_STR_PREALLOC;
+ str->s = (zend_string *) perealloc(str->s, _STR_HEADER_SIZE + str->a + 1, persistent);
}
}
return newlen;