From 3ac0267daacb01497b4d4d4980aa06354488babf Mon Sep 17 00:00:00 2001 From: Ariel Manzur Date: Fri, 19 Feb 2016 07:01:57 -0300 Subject: [PATCH] better array alignment --- core/os/memory.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/os/memory.h b/core/os/memory.h index 3fe845aff48..8eb5ceccb6e 100644 --- a/core/os/memory.h +++ b/core/os/memory.h @@ -308,11 +308,11 @@ T* memnew_arr_template(size_t p_elements,const char *p_descr="") { same strategy used by std::vector, and the DVector class, so it should be safe.*/ size_t len = sizeof(T) * p_elements; - unsigned int *mem = (unsigned int*)Memory::alloc_static( len + sizeof(size_t), p_descr ); + unsigned int *mem = (unsigned int*)Memory::alloc_static( len + MAX(sizeof(size_t), DEFAULT_ALIGNMENT), p_descr ); T *failptr=0; //get rid of a warning ERR_FAIL_COND_V( !mem, failptr ); *mem=p_elements; - mem = (unsigned int *)( ((uint8_t*)mem) + sizeof(size_t)); + mem = (unsigned int *)( ((uint8_t*)mem) + MAX(sizeof(size_t), DEFAULT_ALIGNMENT)); T* elems = (T*)mem; /* call operator new */ @@ -331,14 +331,14 @@ T* memnew_arr_template(size_t p_elements,const char *p_descr="") { template size_t memarr_len(const T *p_class) { - uint8_t* ptr = ((uint8_t*)p_class) - sizeof(size_t); + uint8_t* ptr = ((uint8_t*)p_class) - MAX(sizeof(size_t), DEFAULT_ALIGNMENT); return *(size_t*)ptr; } template void memdelete_arr(T *p_class) { - unsigned int * elems = (unsigned int*)(((uint8_t*)p_class) - sizeof(size_t)); + unsigned int * elems = (unsigned int*)(((uint8_t*)p_class) - MAX(sizeof(size_t), DEFAULT_ALIGNMENT)); for (unsigned int i=0;i<*elems;i++) {