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;
};
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;
#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) \
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;