DestroyMemoryHandler
destroy_memory_handler;
+
+ AcquireAlignedMemoryHandler
+ acquire_aligned_memory_handler;
+
+ RelinquishAlignedMemoryHandler
+ relinquish_aligned_memory_handler;
} MagickMemoryMethods;
struct _MemoryInfo
#if defined _MSC_VER
(AcquireMemoryHandler) MSCMalloc,
(ResizeMemoryHandler) MSCRealloc,
- (DestroyMemoryHandler) MSCFree
+ (DestroyMemoryHandler) MSCFree,
#else
(AcquireMemoryHandler) malloc,
(ResizeMemoryHandler) realloc,
- (DestroyMemoryHandler) free
+ (DestroyMemoryHandler) free,
#endif
+ (AcquireAlignedMemoryHandler) NULL,
+ (RelinquishAlignedMemoryHandler) NULL
};
#if defined(MAGICKCORE_ANONYMOUS_MEMORY_SUPPORT)
static MemoryPool
extent=AlignedExtent(size,alignment);
if ((size == 0) || (extent < size))
return((void *) NULL);
+ if (memory_methods.acquire_aligned_memory_handler != (AcquireAlignedMemoryHandler) NULL)
+ return(memory_methods.acquire_aligned_memory_handler(extent,alignment));
#if defined(MAGICKCORE_HAVE_POSIX_MEMALIGN)
if (posix_memalign(&memory,alignment,extent) != 0)
memory=NULL;
{
if (memory == (void *) NULL)
return((void *) NULL);
+ if (memory_methods.relinquish_aligned_memory_handler != (RelinquishAlignedMemoryHandler) NULL)
+ {
+ memory_methods.relinquish_aligned_memory_handler(memory);
+ return(NULL);
+ }
#if defined(MAGICKCORE_HAVE_POSIX_MEMALIGN)
free(memory);
#elif defined(MAGICKCORE_HAVE__ALIGNED_MALLOC)
if (destroy_memory_handler != (DestroyMemoryHandler) NULL)
memory_methods.destroy_memory_handler=destroy_memory_handler;
}
+\f
+/*
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% %
+% %
+% S e t M a g i c k A l i g n e d M e m o r y M e t h o d s %
+% %
+% %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% SetMagickAlignedMemoryMethods() sets the methods to acquire and relinquish
+% aligned memory.
+%
+% The format of the SetMagickAlignedMemoryMethods() method is:
+%
+% SetMagickAlignedMemoryMethods(
+% AcquireAlignedMemoryHandler acquire_aligned_memory_handler,
+% RelinquishAlignedMemoryHandler relinquish_aligned_memory_handler)
+%
+% A description of each parameter follows:
+%
+% o acquire_memory_handler: method to acquire aligned memory.
+%
+% o relinquish_aligned_memory_handler: method to relinquish aligned memory.
+%
+*/
+MagickExport void SetMagickAlignedMemoryMethods(
+ AcquireAlignedMemoryHandler acquire_aligned_memory_handler,
+ RelinquishAlignedMemoryHandler relinquish_aligned_memory_handler)
+{
+ memory_methods.acquire_aligned_memory_handler=acquire_aligned_memory_handler;
+ memory_methods.relinquish_aligned_memory_handler=
+ relinquish_aligned_memory_handler;
+}
typedef void
*(*AcquireMemoryHandler)(size_t) magick_alloc_size(1),
(*DestroyMemoryHandler)(void *),
- *(*ResizeMemoryHandler)(void *,size_t) magick_alloc_size(2);
+ *(*ResizeMemoryHandler)(void *,size_t) magick_alloc_size(2),
+ *(*AcquireAlignedMemoryHandler)(const size_t,const size_t),
+ (*RelinquishAlignedMemoryHandler)(void *);
extern MagickExport MemoryInfo
*AcquireVirtualMemory(const size_t,const size_t) magick_alloc_sizes(1,2),
*ResizeQuantumMemory(void *,const size_t,const size_t)
magick_attribute((__malloc__)) magick_alloc_sizes(2,3),
SetMagickMemoryMethods(AcquireMemoryHandler,ResizeMemoryHandler,
- DestroyMemoryHandler);
+ DestroyMemoryHandler),
+ SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler,
+ RelinquishAlignedMemoryHandler);
#if defined(__cplusplus) || defined(c_plusplus)
}