| 78 | } |
| 79 | |
| 80 | void* aligned_malloc(size_t bytes_size, size_t alignment) { |
| 81 | void* origin_ptr; |
| 82 | void** align_ptr; |
| 83 | int offset = alignment - 1 + sizeof(void*); |
| 84 | |
| 85 | origin_ptr = (void*)malloc(bytes_size + offset); |
| 86 | align_ptr = (void**)(((size_t)(origin_ptr) + offset) & ~(alignment - 1)); |
| 87 | align_ptr[-1] = origin_ptr; |
| 88 | return align_ptr; |
| 89 | } |
| 90 | |
| 91 | void aligned_free(void *align_ptr) { |
| 92 | free(((void**)align_ptr)[-1]); |