xue@11
|
1 /*
|
xue@11
|
2 Harmonic sinusoidal modelling and tools
|
xue@11
|
3
|
xue@11
|
4 C++ code package for harmonic sinusoidal modelling and relevant signal processing.
|
xue@11
|
5 Centre for Digital Music, Queen Mary, University of London.
|
xue@11
|
6 This file copyright 2011 Wen Xue.
|
xue@11
|
7
|
xue@11
|
8 This program is free software; you can redistribute it and/or
|
xue@11
|
9 modify it under the terms of the GNU General Public License as
|
xue@11
|
10 published by the Free Software Foundation; either version 2 of the
|
xue@11
|
11 License, or (at your option) any later version.
|
xue@11
|
12 */
|
xue@1
|
13 //---------------------------------------------------------------------------
|
xue@1
|
14
|
xue@1
|
15
|
xue@1
|
16 #include <memory.h>
|
xue@1
|
17 #include <stdlib.h>
|
xue@1
|
18 #include "align8.h"
|
xue@1
|
19
|
xue@1
|
20 //---------------------------------------------------------------------------
|
xue@1
|
21 /*
|
xue@1
|
22 function malloc8: 8-byte (64-bit) aligned memory allocation.
|
xue@1
|
23
|
xue@1
|
24 Returns pointer to a memory block of $size starting at an address divisible by 8.
|
xue@1
|
25 */
|
xue@1
|
26 void* malloc8(unsigned size)
|
xue@1
|
27 {
|
Chris@4
|
28 #if (!defined(__SIZEOF_POINTER__) || (__SIZEOF_POINTER__ == 4))
|
xue@1
|
29 char *buffer, *result;
|
xue@1
|
30 buffer=(char*)malloc(size+8+sizeof(void*));
|
xue@1
|
31 if(!buffer) return(NULL);
|
xue@1
|
32 char* tmp=&buffer[sizeof(void*)];
|
xue@1
|
33 result=&((char*)((unsigned)tmp&0xFFFFFFF8))[8];
|
xue@1
|
34 ((void**)result)[-1]=buffer;
|
xue@1
|
35 return(result);
|
Chris@4
|
36 #else
|
Chris@4
|
37 return malloc(size);
|
Chris@4
|
38 #endif
|
xue@1
|
39 }//malloc8
|
xue@1
|
40
|
xue@1
|
41 /*
|
xue@1
|
42 function free8: deallocation for malloc8()
|
xue@1
|
43
|
xue@1
|
44 No return value.
|
xue@1
|
45 */
|
xue@1
|
46 void free8(void* buffer8)
|
xue@1
|
47 {
|
Chris@4
|
48 #if (!defined(__SIZEOF_POINTER__) || (__SIZEOF_POINTER__ == 4))
|
Chris@4
|
49 if (buffer8) free(((void**)buffer8)[-1]);
|
Chris@4
|
50 #else
|
Chris@4
|
51 free(buffer8);
|
Chris@4
|
52 #endif
|
xue@1
|
53 }//free8
|
Chris@4
|
54
|