@@ -111,27 +111,27 @@ static size_t total_freed_bytes=0;
111
111
// malloc wrappers, aligned allocation
112
112
113
113
#ifdef _P64
114
- #define malloc_a16 (sz ) malloc( ((sz)+15)&-16)
114
+ #define calloc_a16 (sz ) calloc(1, ((sz)+15)&-16)
115
115
#define free_a16 (p ) free(p)
116
116
117
- #elif defined(_OS_WINDOWS_ ) /* 32-bit OS is implicit here. */
118
- #define malloc_a16 (sz ) _aligned_malloc(sz?((sz)+15)&-16:1, 16)
119
- #define free_a16 (p ) _aligned_free(p)
120
-
121
117
#elif defined(__APPLE__ )
122
- #define malloc_a16 (sz ) malloc( ((sz)+15)&-16)
118
+ #define calloc_a16 (sz ) calloc(1, ((sz)+15)&-16)
123
119
#define free_a16 (p ) free(p)
124
120
125
121
#else
126
- static inline void * malloc_a16 (size_t sz )
122
+ static inline void * calloc_a16 (size_t n )
127
123
{
128
- void * ptr ;
129
- if (posix_memalign (& ptr , 16 , (sz + 15 )& -16 ))
130
- return NULL ;
131
- return ptr ;
124
+ p = (void * ) (((uintptr_t ) p0 + 16 ) & (~((uintptr_t ) (16 - 1 ))));
125
+ * ((void * * ) p - 1 ) = p0 ;
126
+ return p ;
127
+ }
128
+ static inline void * realloc_a16 (void * p , size_t n )
129
+ {
130
+ }
131
+ static inline void free_a16 (void * p )
132
+ {
133
+ if (p ) free (* ((void * * ) p - 1 ));
132
134
}
133
- #define free_a16 (p ) free(p)
134
-
135
135
#endif
136
136
137
137
DLLEXPORT void * jl_gc_counted_malloc (size_t sz )
@@ -168,7 +168,7 @@ void *jl_gc_managed_malloc(size_t sz)
168
168
if (allocd_bytes > collect_interval )
169
169
jl_gc_collect ();
170
170
sz = (sz + 15 ) & -16 ;
171
- void * b = malloc_a16 (sz );
171
+ void * b = calloc_a16 (sz );
172
172
if (b == NULL )
173
173
jl_throw (jl_memory_exception );
174
174
allocd_bytes += sz ;
@@ -183,16 +183,11 @@ void *jl_gc_managed_realloc(void *d, size_t sz, size_t oldsz, int isaligned)
183
183
void * b ;
184
184
#ifdef _P64
185
185
b = realloc (d , sz );
186
- #elif defined(_OS_WINDOWS_ )
187
- if (isaligned )
188
- b = _aligned_realloc (d , sz , 16 );
189
- else
190
- b = realloc (d , sz );
191
186
#elif defined(__APPLE__ )
192
187
b = realloc (d , sz );
193
188
#else
194
189
// TODO better aligned realloc here
195
- b = malloc_a16 (sz );
190
+ b = calloc_a16 (sz );
196
191
if (b != NULL ) {
197
192
memcpy (b , d , oldsz );
198
193
if (isaligned ) free_a16 (d ); else free (d );
@@ -348,7 +343,7 @@ static void *alloc_big(size_t sz)
348
343
if (sz + offs + 15 < offs + 15 ) // overflow in adding offs, size was "negative"
349
344
jl_throw (jl_memory_exception );
350
345
size_t allocsz = (sz + offs + 15 ) & -16 ;
351
- bigval_t * v = (bigval_t * )malloc_a16 (allocsz );
346
+ bigval_t * v = (bigval_t * )calloc_a16 (allocsz );
352
347
allocd_bytes += allocsz ;
353
348
if (v == NULL )
354
349
jl_throw (jl_memory_exception );
@@ -462,7 +457,7 @@ static void add_page(pool_t *p)
462
457
gcpage_t * pg = (gcpage_t * )mmap (NULL , sizeof (gcpage_t ), PROT_READ |PROT_WRITE ,
463
458
MAP_ANONYMOUS |MAP_PRIVATE , -1 , 0 );
464
459
#else
465
- gcpage_t * pg = (gcpage_t * )malloc_a16 (sizeof (gcpage_t ));
460
+ gcpage_t * pg = (gcpage_t * )calloc_a16 (sizeof (gcpage_t ));
466
461
#endif
467
462
if (pg == NULL )
468
463
jl_throw (jl_memory_exception );
0 commit comments