00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef MAGICKCORE_MEMORY_PRIVATE_H
00019 #define MAGICKCORE_MEMORY_PRIVATE_H
00020
00021 #if defined(__cplusplus) || defined(c_plusplus)
00022 extern "C" {
00023 #endif
00024
00025 #include "MagickCore/exception-private.h"
00026
00027 #if defined(__powerpc__)
00028 # define CACHE_LINE_SIZE (16*sizeof(void *))
00029 #else
00030 # define CACHE_LINE_SIZE (8*sizeof(void *))
00031 #endif
00032
00033 #define CacheAlign(size) ((size) < CACHE_LINE_SIZE ? CACHE_LINE_SIZE : (size))
00034
00035 #if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ > 6))
00036 #if !defined(__ICC)
00037 #define MagickAssumeAligned(address) \
00038 __builtin_assume_aligned((address),CACHE_LINE_SIZE)
00039 #else
00040 #define MagickAssumeAligned(address) (address)
00041 #endif
00042 #else
00043 #define MagickAssumeAligned(address) (address)
00044 #endif
00045
00046 MagickExport MagickBooleanType
00047 HeapOverflowSanityCheck(const size_t,const size_t);
00048
00049 MagickExport size_t
00050 GetMaxMemoryRequest(void);
00051
00052 extern MagickPrivate void
00053 ResetMaxMemoryRequest(void),
00054 ResetVirtualAnonymousMemory(void);
00055
00056 static inline void *AcquireCriticalMemory(const size_t size)
00057 {
00058 register void
00059 *memory;
00060
00061
00062
00063
00064 memory=AcquireMagickMemory(size);
00065 if (memory == (void *) NULL)
00066 ThrowFatalException(ResourceLimitFatalError,"MemoryAllocationFailed");
00067 return(memory);
00068 }
00069
00070 #if defined(__cplusplus) || defined(c_plusplus)
00071 }
00072 #endif
00073
00074 #endif