MagickCore  6.9.11
Convert, Edit, Or Compose Bitmap Images
memory_.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2020 ImageMagick Studio LLC, a non-profit organization
3  dedicated to making software imaging solutions freely available.
4 
5  You may not use this file except in compliance with the License. You may
6  obtain a copy of the License at
7 
8  https://imagemagick.org/script/license.php
9 
10  Unless required by applicable law or agreed to in writing, software
11  distributed under the License is distributed on an "AS IS" BASIS,
12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  See the License for the specific language governing permissions and
14  limitations under the License.
15 
16  MagickCore memory methods.
17 */
18 #ifndef MAGICKCORE_MEMORY_H
19 #define MAGICKCORE_MEMORY_H
20 
21 #include <errno.h>
22 #include <assert.h>
23 
24 #if defined(__cplusplus) || defined(c_plusplus)
25 extern "C" {
26 #endif
27 
28 typedef struct _MemoryInfo
29  MemoryInfo;
30 
31 typedef void
32  *(*AcquireMemoryHandler)(size_t) magick_alloc_size(1),
33  (*DestroyMemoryHandler)(void *),
34  *(*ResizeMemoryHandler)(void *,size_t) magick_alloc_size(2),
35  *(*AcquireAlignedMemoryHandler)(const size_t,const size_t),
37 
39  *AcquireVirtualMemory(const size_t,const size_t) magick_alloc_sizes(1,2),
41 
42 extern MagickExport size_t
43  GetMaxMemoryRequest(void);
44 
45 extern MagickExport void
46  *AcquireAlignedMemory(const size_t,const size_t)
47  magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
48  *AcquireMagickMemory(const size_t) magick_attribute((__malloc__))
50  *AcquireCriticalMemory(const size_t),
51  *AcquireQuantumMemory(const size_t,const size_t)
52  magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
54  const size_t) magick_attribute((__nonnull__)),
61  *ResetMagickMemory(void *,int,const size_t),
62  *ResizeMagickMemory(void *,const size_t)
63  magick_attribute((__malloc__)) magick_alloc_size(2),
64  *ResizeQuantumMemory(void *,const size_t,const size_t)
65  magick_attribute((__malloc__)) magick_alloc_sizes(2,3),
70 
72  const size_t count,const size_t quantum)
73 {
74  if ((count == 0) || (quantum == 0))
75  return(MagickTrue);
76  if (quantum != ((count*quantum)/count))
77  {
78  errno=ENOMEM;
79  return(MagickTrue);
80  }
81  return(MagickFalse);
82 }
83 
85  const size_t count,const size_t quantum,size_t *const extent)
86 {
87  size_t
88  length;
89 
90  if ((count == 0) || (quantum == 0))
91  return(MagickTrue);
92  length=count*quantum;
93  if (quantum != (length/count))
94  {
95  errno=ENOMEM;
96  return(MagickTrue);
97  }
98  assert(extent != (size_t *const) NULL);
99  *extent=length;
100  return(MagickFalse);
101 }
102 
103 #if defined(__cplusplus) || defined(c_plusplus)
104 }
105 #endif
106 
107 #endif
AcquireAlignedMemory_Generic
static void * AcquireAlignedMemory_Generic(const size_t size)
Definition: memory.c:310
LockSemaphoreInfo
MagickExport void LockSemaphoreInfo(SemaphoreInfo *semaphore_info)
Definition: semaphore.c:293
MagickExport
#define MagickExport
Definition: method-attribute.h:80
MemoryPool
struct _MemoryPool MemoryPool
policy.h
magick_alloc_size
#define magick_alloc_size(x)
Definition: method-attribute.h:113
RelinquishAlignedMemory
MagickExport void * RelinquishAlignedMemory(void *memory)
Definition: memory.c:1081
DestroyMagickMemory
MagickExport void DestroyMagickMemory(void)
AcquireVirtualMemory
MagickExport MemoryInfo * AcquireVirtualMemory(const size_t count, const size_t quantum)
Definition: memory.c:670
RelinquishAlignedMemory
MagickExport void * RelinquishAlignedMemory(void *)
ResizeMagickMemory
MagickExport void * ResizeMagickMemory(void *, const size_t) magick_attribute((__malloc__)) magick_alloc_size(2)
MaxBlockExponent
#define MaxBlockExponent
Definition: memory.c:77
AcquireAlignedMemoryHandler
void *(*)(*) *(*) *(* AcquireAlignedMemoryHandler)(const size_t, const size_t)
Definition: memory_.h:35
_MagickMemoryMethods::acquire_aligned_memory_handler
AcquireAlignedMemoryHandler acquire_aligned_memory_handler
Definition: memory.c:129
MagickCoreSignature
#define MagickCoreSignature
Definition: method-attribute.h:86
ResizeQuantumMemory
MagickExport void * ResizeQuantumMemory(void *memory, const size_t count, const size_t quantum)
Definition: memory.c:1408
memory_methods
static MagickMemoryMethods memory_methods
Definition: memory.c:194
_MemoryPool
Definition: memory.c:154
MaxSegments
#define MaxSegments
Definition: memory.c:79
pointer_to_space_for_actual_base_address
static void ** pointer_to_space_for_actual_base_address(void *const p)
Definition: memory.c:289
ALIGNMENT_OVERHEAD
#define ALIGNMENT_OVERHEAD
Definition: memory.c:282
_MemoryInfo::type
VirtualMemoryType type
Definition: memory.c:141
AcquireVirtualMemory
MagickExport MemoryInfo * AcquireVirtualMemory(const size_t, const size_t) magick_alloc_sizes(1
memory-private.h
_MagickMemoryMethods::acquire_memory_handler
AcquireMemoryHandler acquire_memory_handler
Definition: memory.c:120
magick_restrict
#define magick_restrict
Definition: MagickCore.h:41
SetMagickMemoryMethods
MagickExport void SetMagickMemoryMethods(AcquireMemoryHandler acquire_memory_handler, ResizeMemoryHandler resize_memory_handler, DestroyMemoryHandler destroy_memory_handler)
Definition: memory.c:1488
VirtualMemoryType
VirtualMemoryType
Definition: memory.c:93
_MemoryInfo::filename
char filename[MagickPathExtent]
Definition: memory.c:138
magick_alloc_sizes
#define magick_alloc_sizes(x, y)
Definition: method-attribute.h:114
UnmapBlob
MagickExport MagickBooleanType UnmapBlob(void *, const size_t)
Definition: blob.c:4751
_MemoryPool::blocks
void * blocks[MaxBlocks+1]
Definition: memory.c:159
resource_.h
_DataSegmentInfo::next
struct _DataSegmentInfo * next
Definition: memory.c:114
HeapOverflowSanityCheck
static MagickBooleanType HeapOverflowSanityCheck(const size_t count, const size_t quantum)
Definition: memory_.h:71
max_memory_request
static size_t max_memory_request
Definition: memory.c:173
_MemoryInfo::blob
void * blob
Definition: memory.c:147
DestroyMemoryHandler
void *(*)(* DestroyMemoryHandler)(void *)
Definition: memory_.h:33
string_.h
ResizeMagickMemory
MagickExport void * ResizeMagickMemory(void *memory, const size_t size)
Definition: memory.c:1348
DestroyString
MagickExport char * DestroyString(char *string)
Definition: string.c:810
StringToSizeType
static size_t StringToSizeType(const char *string, const double interval)
Definition: string-private.h:113
_MemoryPool::segment_pool
DataSegmentInfo segment_pool[MaxSegments]
Definition: memory.c:166
actual_base_address
static void * actual_base_address(void *const p)
Definition: memory.c:294
MagickTrue
@ MagickTrue
Definition: magick-type.h:201
blob.h
semaphore.h
NextBlockInList
#define NextBlockInList(block)
Definition: memory.c:81
IOMode
@ IOMode
Definition: blob.h:35
BlockFooter
#define BlockFooter(block, size)
Definition: memory.c:73
reserve_space_for_actual_base_address
static void * reserve_space_for_actual_base_address(void *const p)
Definition: memory.c:284
SetMagickAlignedMemoryMethods
MagickExport void SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler acquire_aligned_memory_handler, RelinquishAlignedMemoryHandler relinquish_aligned_memory_handler)
Definition: memory.c:1449
blob-private.h
GetMaxMemoryRequest
MagickExport size_t GetMaxMemoryRequest(void)
Definition: memory.c:1007
ResizeMemoryHandler
void *(*)(*) *(* ResizeMemoryHandler)(void *, size_t) magick_alloc_size(2)
Definition: memory_.h:34
ResetVirtualAnonymousMemory
MagickPrivate void ResetVirtualAnonymousMemory(void)
Definition: memory.c:1296
AcquireMagickMemory
MagickExport void * AcquireMagickMemory(const size_t size)
Definition: memory.c:521
SetMagickAlignedMemoryMethods
MagickExport void SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler, RelinquishAlignedMemoryHandler)
_MemoryInfo
Definition: memory.c:136
SizeMask
#define SizeMask
Definition: memory.c:86
_DataSegmentInfo::bound
void * bound
Definition: memory.c:104
SemaphoreInfo
Definition: semaphore.c:61
NextBlock
#define NextBlock(block)
Definition: memory.c:80
PreviousBlockInList
#define PreviousBlockInList(block)
Definition: memory.c:84
CopyMagickMemory
MagickExport void * CopyMagickMemory(void *magick_restrict destination, const void *magick_restrict source, const size_t size)
Definition: memory.c:800
_DataSegmentInfo::mapped
MagickBooleanType mapped
Definition: memory.c:107
_DataSegmentInfo::allocation
void * allocation
Definition: memory.c:103
CACHE_LINE_SIZE
#define CACHE_LINE_SIZE
Definition: memory-private.h:30
GetVirtualMemoryBlob
MagickExport void * GetVirtualMemoryBlob(const MemoryInfo *)
GetMagickMemoryMethods
MagickExport void GetMagickMemoryMethods(AcquireMemoryHandler *acquire_memory_handler, ResizeMemoryHandler *resize_memory_handler, DestroyMemoryHandler *destroy_memory_handler)
Definition: memory.c:976
PreviousBlockBit
#define PreviousBlockBit
Definition: memory.c:83
_MemoryInfo::signature
size_t signature
Definition: memory.c:150
LocaleCompare
MagickExport int LocaleCompare(const char *p, const char *q)
Definition: locale.c:1435
adjust
static void * adjust(void *const p)
Definition: memory.c:304
_MagickMemoryMethods::resize_memory_handler
ResizeMemoryHandler resize_memory_handler
Definition: memory.c:123
UnalignedVirtualMemory
@ UnalignedVirtualMemory
Definition: memory.c:97
MagickAssumeAligned
#define MagickAssumeAligned(address)
Definition: memory-private.h:43
DestroyMagickMemory
MagickExport void DestroyMagickMemory(void)
Definition: memory.c:848
SizeOfBlock
#define SizeOfBlock(block)
Definition: memory.c:87
MapVirtualMemory
@ MapVirtualMemory
Definition: memory.c:96
MaxBlocks
#define MaxBlocks
Definition: memory.c:78
MagickPrivate
#define MagickPrivate
Definition: method-attribute.h:81
MagickFalse
@ MagickFalse
Definition: magick-type.h:200
AcquireAlignedMemory_Actual
#define AcquireAlignedMemory_Actual
Definition: memory.c:309
_DataSegmentInfo::previous
struct _DataSegmentInfo * previous
Definition: memory.c:112
AcquireAlignedMemory
MagickExport void * AcquireAlignedMemory(const size_t, const size_t) magick_attribute((__malloc__)) magick_alloc_sizes(1
_DataSegmentInfo
Definition: memory.c:101
AcquireAlignedMemory
MagickExport void * AcquireAlignedMemory(const size_t count, const size_t quantum)
Definition: memory.c:337
UndefinedVirtualMemory
@ UndefinedVirtualMemory
Definition: memory.c:94
ResizeQuantumMemory
MagickExport void * ResizeQuantumMemory(void *, const size_t, const size_t) magick_attribute((__malloc__)) magick_alloc_sizes(2
AcquireMemoryHandler
void *(* AcquireMemoryHandler)(size_t) magick_alloc_size(1)
Definition: memory_.h:32
MagickMemoryMethods
struct _MagickMemoryMethods MagickMemoryMethods
_MagickMemoryMethods::destroy_memory_handler
DestroyMemoryHandler destroy_memory_handler
Definition: memory.c:126
_DataSegmentInfo::length
size_t length
Definition: memory.c:110
ActivateSemaphoreInfo
MagickExport void ActivateSemaphoreInfo(SemaphoreInfo **semaphore_info)
Definition: semaphore.c:98
_MagickMemoryMethods::relinquish_aligned_memory_handler
RelinquishAlignedMemoryHandler relinquish_aligned_memory_handler
Definition: memory.c:132
ResetMaxMemoryRequest
MagickPrivate void ResetMaxMemoryRequest(void)
Definition: memory.c:1273
_MemoryPool::allocation
size_t allocation
Definition: memory.c:156
AcquireMagickMemory
MagickExport void * AcquireMagickMemory(const size_t) magick_attribute((__malloc__)) magick_alloc_size(1)
DestroySemaphoreInfo
MagickExport void DestroySemaphoreInfo(SemaphoreInfo **semaphore_info)
Definition: semaphore.c:351
MagickAddressType
size_t MagickAddressType
Definition: magick-type.h:151
magick_attribute
MagickExport MagickBooleanType magick_attribute((deprecated))
GetVirtualMemoryBlob
MagickExport void * GetVirtualMemoryBlob(const MemoryInfo *memory_info)
Definition: memory.c:1051
RelinquishVirtualMemory
MagickExport MemoryInfo * RelinquishVirtualMemory(MemoryInfo *memory_info)
Definition: memory.c:1190
MagickBooleanType
MagickBooleanType
Definition: magick-type.h:199
_MemoryPool::number_segments
size_t number_segments
Definition: memory.c:162
_MagickMemoryMethods
Definition: memory.c:118
RelinquishMagickMemory
MagickExport void * RelinquishMagickMemory(void *memory)
Definition: memory.c:1123
_MemoryInfo::length
size_t length
Definition: memory.c:144
utility-private.h
RelinquishMagickMemory
MagickExport void * RelinquishMagickMemory(void *)
GetMagickMemoryMethods
MagickExport void GetMagickMemoryMethods(AcquireMemoryHandler *, ResizeMemoryHandler *, DestroyMemoryHandler *)
studio.h
RelinquishUniqueFileResource
MagickExport MagickBooleanType RelinquishUniqueFileResource(const char *path)
Definition: resource.c:1287
GetMaxMemoryRequest
MagickExport size_t GetMaxMemoryRequest(void)
Definition: memory.c:1007
RelinquishVirtualMemory
MagickExport MemoryInfo * RelinquishVirtualMemory(MemoryInfo *)
Definition: memory.c:1190
_MemoryPool::segments
DataSegmentInfo * segments[MaxSegments]
Definition: memory.c:165
CACHE_ALIGNED
#define CACHE_ALIGNED(n)
Definition: memory-private.h:33
SegmentSize
#define SegmentSize
Definition: memory.c:85
DataSegmentInfo
struct _DataSegmentInfo DataSegmentInfo
ResetMagickMemory
MagickExport void * ResetMagickMemory(void *memory, int byte, const size_t size)
Definition: memory.c:1249
AcquireCriticalMemory
MagickExport void * AcquireCriticalMemory(const size_t size)
Definition: memory.c:595
SetMagickMemoryMethods
MagickExport void SetMagickMemoryMethods(AcquireMemoryHandler, ResizeMemoryHandler, DestroyMemoryHandler)
Definition: memory.c:1488
BlockThreshold
#define BlockThreshold
Definition: memory.c:76
memory_.h
AcquireUniqueFileResource
MagickExport int AcquireUniqueFileResource(char *path)
Definition: resource.c:600
RelinquishAlignedMemoryHandler
void *(*)(*) *(*) *(*)(* RelinquishAlignedMemoryHandler)(void *)
Definition: memory_.h:36
PreviousBlock
#define PreviousBlock(block)
Definition: memory.c:82
exception-private.h
ThrowFatalException
#define ThrowFatalException(severity, tag)
Definition: exception-private.h:42
UnlockSemaphoreInfo
MagickExport void UnlockSemaphoreInfo(SemaphoreInfo *semaphore_info)
Definition: semaphore.c:449
exception.h
AlignedVirtualMemory
@ AlignedVirtualMemory
Definition: memory.c:95
MagickULLConstant
#define MagickULLConstant(c)
Definition: magick-type.h:39
GetPolicyValue
MagickExport char * GetPolicyValue(const char *name)
Definition: policy.c:501
string-private.h
AcquireQuantumMemory
MagickExport void * AcquireQuantumMemory(const size_t, const size_t) magick_attribute((__malloc__)) magick_alloc_sizes(1
ResetMagickMemory
MagickExport void * ResetMagickMemory(void *, int, const size_t)
virtual_anonymous_memory
static size_t virtual_anonymous_memory
Definition: memory.c:174
ResourceLimitFatalError
@ ResourceLimitFatalError
Definition: exception.h:78
BlockHeader
#define BlockHeader(block)
Definition: memory.c:75
HeapOverflowSanityCheckGetSize
static MagickBooleanType HeapOverflowSanityCheckGetSize(const size_t count, const size_t quantum, size_t *const extent)
Definition: memory_.h:84
MapBlob
MagickExport unsigned char * MapBlob(int, const MapMode, const MagickOffsetType, const size_t)
Definition: blob.c:2392
AcquireCriticalMemory
MagickExport void * AcquireCriticalMemory(const size_t)
AcquireQuantumMemory
MagickExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
Definition: memory.c:634
CopyMagickMemory
MagickExport void * CopyMagickMemory(void *magick_restrict, const void *magick_restrict, const size_t) magick_attribute((__nonnull__))
MagickOffsetType
ssize_t MagickOffsetType
Definition: magick-type.h:135
align_to_cache
static void * align_to_cache(void *const p)
Definition: memory.c:299
MagickPathExtent
#define MagickPathExtent
Definition: magick-type.h:31