This source file includes following definitions.
- mca_mpool_default_alloc
- mca_mpool_default_realloc
- mca_mpool_default_free
- mca_mpool_default_finalize
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "opal_config.h"
14 #include "opal/align.h"
15
16 #include <stdio.h>
17 #include <stdlib.h>
18 #ifdef HAVE_UNISTD_H
19 #include <unistd.h>
20 #endif
21
22 #include "opal/mca/mca.h"
23 #include "opal/mca/base/base.h"
24 #include "opal/mca/mpool/base/base.h"
25 #include "opal/constants.h"
26 #include "opal/util/sys_limits.h"
27
28 static void *mca_mpool_default_alloc (mca_mpool_base_module_t *mpool, size_t size,
29 size_t align, uint32_t flags)
30 {
31 #if HAVE_POSIX_MEMALIGN
32 void *addr = NULL;
33
34 if (align <= sizeof(void *)) {
35 addr = malloc (size);
36 } else {
37 (void) posix_memalign (&addr, align, size);
38 }
39 return addr;
40 #else
41 void *addr, *ret;
42
43 addr = malloc (size + align + sizeof (void *));
44 ret = OPAL_ALIGN_PTR((intptr_t) addr + 8, align, void *);
45 *((void **) ret - 1) = addr;
46 return ret;
47 #endif
48 }
49
50 static void *mca_mpool_default_realloc (mca_mpool_base_module_t *mpool, void *addr, size_t size)
51 {
52 #if HAVE_POSIX_MEMALIGN
53 return realloc (addr, size);
54 #else
55 if (NULL != addr) {
56 void *base = *((void **) addr - 1);
57 void *ptr = realloc (base, size + (intptr_t) addr - (intptr_t) - size);
58 void *ret = (void *)((intptr_t) ptr + (intptr_t) addr - (intptr_t) - size);
59 *((void **) ret - 1) = ptr;
60 return ret;
61 } else {
62 return mca_mpool_default_alloc (mpool, size, 8, 0);
63 }
64 #endif
65 }
66
67 static void mca_mpool_default_free (mca_mpool_base_module_t *mpool, void *addr)
68 {
69 #if HAVE_POSIX_MEMALIGN
70 free (addr);
71 #else
72 if (NULL != addr) {
73 void *base = *((void **) addr - 1);
74 free (base);
75 }
76 #endif
77 }
78
79 static void mca_mpool_default_finalize (struct mca_mpool_base_module_t *mpool)
80 {
81 }
82
83 static mca_mpool_base_module_t mca_mpool_malloc_module = {
84 .mpool_alloc = mca_mpool_default_alloc,
85 .mpool_realloc = mca_mpool_default_realloc,
86 .mpool_free = mca_mpool_default_free,
87 .mpool_finalize = mca_mpool_default_finalize,
88 .flags = MCA_MPOOL_FLAGS_MPI_ALLOC_MEM,
89 };
90
91 mca_mpool_base_module_t *mca_mpool_base_default_module = &mca_mpool_malloc_module;