MagickCore  6.9.12-38
Convert, Edit, Or Compose Bitmap Images
memory_.h
Go to the documentation of this file.
1 /*
2  Copyright 1999-2021 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 
23 #if defined(__cplusplus) || defined(c_plusplus)
24 extern "C" {
25 #endif
26 
27 typedef struct _MemoryInfo
28  MemoryInfo;
29 
30 typedef void
31  *(*AcquireMemoryHandler)(size_t) magick_alloc_size(1),
32  (*DestroyMemoryHandler)(void *),
33  *(*ResizeMemoryHandler)(void *,size_t) magick_alloc_size(2),
34  *(*AcquireAlignedMemoryHandler)(const size_t,const size_t),
36 
38  *AcquireVirtualMemory(const size_t,const size_t) magick_alloc_sizes(1,2),
40 
41 extern MagickExport size_t
42  GetMaxMemoryRequest(void);
43 
44 extern MagickExport void
45  *AcquireAlignedMemory(const size_t,const size_t)
46  magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
47  *AcquireMagickMemory(const size_t) magick_attribute((__malloc__))
49  *AcquireCriticalMemory(const size_t),
50  *AcquireQuantumMemory(const size_t,const size_t)
51  magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
53  const size_t) magick_attribute((__nonnull__)),
60  *ResetMagickMemory(void *,int,const size_t),
61  *ResizeMagickMemory(void *,const size_t)
62  magick_attribute((__malloc__)) magick_alloc_size(2),
63  *ResizeQuantumMemory(void *,const size_t,const size_t)
64  magick_attribute((__malloc__)) magick_alloc_sizes(2,3),
69 
71  const size_t count,const size_t quantum)
72 {
73  if ((count == 0) || (quantum == 0))
74  return(MagickTrue);
75  if (quantum != ((count*quantum)/count))
76  {
77  errno=ENOMEM;
78  return(MagickTrue);
79  }
80  return(MagickFalse);
81 }
82 
84  const size_t count,const size_t quantum,size_t *const extent)
85 {
86  size_t
87  length;
88 
89  if ((count == 0) || (quantum == 0))
90  return(MagickTrue);
91  length=count*quantum;
92  if (quantum != (length/count))
93  {
94  errno=ENOMEM;
95  return(MagickTrue);
96  }
97  if (extent != (size_t *const) NULL)
98  *extent=length;
99  return(MagickFalse);
100 }
101 
102 #if defined(__cplusplus) || defined(c_plusplus)
103 }
104 #endif
105 
106 #endif
AcquireAlignedMemory_Generic
static void * AcquireAlignedMemory_Generic(const size_t size)
Definition: memory.c:338
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:1120
DestroyMagickMemory
MagickExport void DestroyMagickMemory(void)
AcquireVirtualMemory
MagickExport MemoryInfo * AcquireVirtualMemory(const size_t count, const size_t quantum)
Definition: memory.c:705
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:105
AcquireAlignedMemoryHandler
void *(*)(*) *(*) *(* AcquireAlignedMemoryHandler)(const size_t, const size_t)
Definition: memory_.h:34
_MagickMemoryMethods::acquire_aligned_memory_handler
AcquireAlignedMemoryHandler acquire_aligned_memory_handler
Definition: memory.c:157
MagickCoreSignature
#define MagickCoreSignature
Definition: method-attribute.h:86
ResetMagickMemory
MagickExport void * ResetMagickMemory(void *memory, int c, const size_t size)
Definition: memory.c:1291
ResizeQuantumMemory
MagickExport void * ResizeQuantumMemory(void *memory, const size_t count, const size_t quantum)
Definition: memory.c:1458
memory_methods
static MagickMemoryMethods memory_methods
Definition: memory.c:222
_MemoryPool
Definition: memory.c:182
MaxSegments
#define MaxSegments
Definition: memory.c:107
pointer_to_space_for_actual_base_address
static void ** pointer_to_space_for_actual_base_address(void *const p)
Definition: memory.c:317
ALIGNMENT_OVERHEAD
#define ALIGNMENT_OVERHEAD
Definition: memory.c:310
_MemoryInfo::type
VirtualMemoryType type
Definition: memory.c:169
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:148
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:1542
VirtualMemoryType
VirtualMemoryType
Definition: memory.c:121
_MemoryInfo::filename
char filename[MagickPathExtent]
Definition: memory.c:166
image-private.h
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:4746
_MemoryPool::blocks
void * blocks[MaxBlocks+1]
Definition: memory.c:187
resource_.h
_DataSegmentInfo::next
struct _DataSegmentInfo * next
Definition: memory.c:142
HeapOverflowSanityCheck
static MagickBooleanType HeapOverflowSanityCheck(const size_t count, const size_t quantum)
Definition: memory_.h:70
max_memory_request
static size_t max_memory_request
Definition: memory.c:201
_MemoryInfo::blob
void * blob
Definition: memory.c:175
DestroyMemoryHandler
void *(*)(* DestroyMemoryHandler)(void *)
Definition: memory_.h:32
string_.h
ResizeMagickMemory
MagickExport void * ResizeMagickMemory(void *memory, const size_t size)
Definition: memory.c:1398
DestroyString
MagickExport char * DestroyString(char *string)
Definition: string.c:821
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:194
actual_base_address
static void * actual_base_address(void *const p)
Definition: memory.c:322
MagickTrue
@ MagickTrue
Definition: magick-type.h:201
blob.h
semaphore.h
NextBlockInList
#define NextBlockInList(block)
Definition: memory.c:109
IOMode
@ IOMode
Definition: blob.h:35
BlockFooter
#define BlockFooter(block, size)
Definition: memory.c:101
reserve_space_for_actual_base_address
static void * reserve_space_for_actual_base_address(void *const p)
Definition: memory.c:312
SetMagickAlignedMemoryMethods
MagickExport void SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler acquire_aligned_memory_handler, RelinquishAlignedMemoryHandler relinquish_aligned_memory_handler)
Definition: memory.c:1503
blob-private.h
GetMaxMemoryRequest
MagickExport size_t GetMaxMemoryRequest(void)
Definition: memory.c:1044
ResizeMemoryHandler
void *(*)(*) *(* ResizeMemoryHandler)(void *, size_t) magick_alloc_size(2)
Definition: memory_.h:33
ResetVirtualAnonymousMemory
MagickPrivate void ResetVirtualAnonymousMemory(void)
Definition: memory.c:1346
AcquireMagickMemory
MagickExport void * AcquireMagickMemory(const size_t size)
Definition: memory.c:552
SetMagickAlignedMemoryMethods
MagickExport void SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler, RelinquishAlignedMemoryHandler)
_MemoryInfo
Definition: memory.c:164
SizeMask
#define SizeMask
Definition: memory.c:114
_DataSegmentInfo::bound
void * bound
Definition: memory.c:132
SemaphoreInfo
Definition: semaphore.c:61
NextBlock
#define NextBlock(block)
Definition: memory.c:108
PreviousBlockInList
#define PreviousBlockInList(block)
Definition: memory.c:112
CopyMagickMemory
MagickExport void * CopyMagickMemory(void *magick_restrict destination, const void *magick_restrict source, const size_t size)
Definition: memory.c:837
_DataSegmentInfo::mapped
MagickBooleanType mapped
Definition: memory.c:135
_DataSegmentInfo::allocation
void * allocation
Definition: memory.c:131
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:1013
MagickMax
#define MagickMax(x, y)
Definition: image-private.h:36
PreviousBlockBit
#define PreviousBlockBit
Definition: memory.c:111
_MemoryInfo::signature
size_t signature
Definition: memory.c:178
LocaleCompare
MagickExport int LocaleCompare(const char *p, const char *q)
Definition: locale.c:1435
adjust
static void * adjust(void *const p)
Definition: memory.c:332
_MagickMemoryMethods::resize_memory_handler
ResizeMemoryHandler resize_memory_handler
Definition: memory.c:151
UnalignedVirtualMemory
@ UnalignedVirtualMemory
Definition: memory.c:125
MagickAssumeAligned
#define MagickAssumeAligned(address)
Definition: memory-private.h:43
DestroyMagickMemory
MagickExport void DestroyMagickMemory(void)
Definition: memory.c:885
SizeOfBlock
#define SizeOfBlock(block)
Definition: memory.c:115
MapVirtualMemory
@ MapVirtualMemory
Definition: memory.c:124
MaxBlocks
#define MaxBlocks
Definition: memory.c:106
MagickPrivate
#define MagickPrivate
Definition: method-attribute.h:81
MagickFalse
@ MagickFalse
Definition: magick-type.h:200
AcquireAlignedMemory_Actual
#define AcquireAlignedMemory_Actual
Definition: memory.c:337
_DataSegmentInfo::previous
struct _DataSegmentInfo * previous
Definition: memory.c:140
AcquireAlignedMemory
MagickExport void * AcquireAlignedMemory(const size_t, const size_t) magick_attribute((__malloc__)) magick_alloc_sizes(1
_DataSegmentInfo
Definition: memory.c:129
AcquireAlignedMemory
MagickExport void * AcquireAlignedMemory(const size_t count, const size_t quantum)
Definition: memory.c:365
UndefinedVirtualMemory
@ UndefinedVirtualMemory
Definition: memory.c:122
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:31
MagickMemoryMethods
struct _MagickMemoryMethods MagickMemoryMethods
_MagickMemoryMethods::destroy_memory_handler
DestroyMemoryHandler destroy_memory_handler
Definition: memory.c:154
_DataSegmentInfo::length
size_t length
Definition: memory.c:138
ActivateSemaphoreInfo
MagickExport void ActivateSemaphoreInfo(SemaphoreInfo **semaphore_info)
Definition: semaphore.c:98
_MagickMemoryMethods::relinquish_aligned_memory_handler
RelinquishAlignedMemoryHandler relinquish_aligned_memory_handler
Definition: memory.c:160
ResetMaxMemoryRequest
MagickPrivate void ResetMaxMemoryRequest(void)
Definition: memory.c:1323
_MemoryPool::allocation
size_t allocation
Definition: memory.c:184
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:1090
RelinquishVirtualMemory
MagickExport MemoryInfo * RelinquishVirtualMemory(MemoryInfo *memory_info)
Definition: memory.c:1229
MagickBooleanType
MagickBooleanType
Definition: magick-type.h:199
_MemoryPool::number_segments
size_t number_segments
Definition: memory.c:190
_MagickMemoryMethods
Definition: memory.c:146
RelinquishMagickMemory
MagickExport void * RelinquishMagickMemory(void *memory)
Definition: memory.c:1162
_MemoryInfo::length
size_t length
Definition: memory.c:172
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:1044
RelinquishVirtualMemory
MagickExport MemoryInfo * RelinquishVirtualMemory(MemoryInfo *)
Definition: memory.c:1229
_MemoryPool::segments
DataSegmentInfo * segments[MaxSegments]
Definition: memory.c:193
CACHE_ALIGNED
#define CACHE_ALIGNED(n)
Definition: memory-private.h:33
SegmentSize
#define SegmentSize
Definition: memory.c:113
DataSegmentInfo
struct _DataSegmentInfo DataSegmentInfo
AcquireCriticalMemory
MagickExport void * AcquireCriticalMemory(const size_t size)
Definition: memory.c:626
SetMagickMemoryMethods
MagickExport void SetMagickMemoryMethods(AcquireMemoryHandler, ResizeMemoryHandler, DestroyMemoryHandler)
Definition: memory.c:1542
BlockThreshold
#define BlockThreshold
Definition: memory.c:104
memory_.h
AcquireUniqueFileResource
MagickExport int AcquireUniqueFileResource(char *path)
Definition: resource.c:600
RelinquishAlignedMemoryHandler
void *(*)(*) *(*) *(*)(* RelinquishAlignedMemoryHandler)(void *)
Definition: memory_.h:35
PreviousBlock
#define PreviousBlock(block)
Definition: memory.c:110
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:123
MagickULLConstant
#define MagickULLConstant(c)
Definition: magick-type.h:39
GetPolicyValue
MagickExport char * GetPolicyValue(const char *name)
Definition: policy.c:524
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:202
ResourceLimitFatalError
@ ResourceLimitFatalError
Definition: exception.h:78
MagickMin
#define MagickMin(x, y)
Definition: image-private.h:37
BlockHeader
#define BlockHeader(block)
Definition: memory.c:103
HeapOverflowSanityCheckGetSize
static MagickBooleanType HeapOverflowSanityCheckGetSize(const size_t count, const size_t quantum, size_t *const extent)
Definition: memory_.h:83
MinMemoryRequest
#define MinMemoryRequest
MapBlob
MagickExport unsigned char * MapBlob(int, const MapMode, const MagickOffsetType, const size_t)
Definition: blob.c:2386
AcquireCriticalMemory
MagickExport void * AcquireCriticalMemory(const size_t)
MAGICK_SSIZE_MAX
#define MAGICK_SSIZE_MAX
Definition: studio.h:378
AcquireQuantumMemory
MagickExport void * AcquireQuantumMemory(const size_t count, const size_t quantum)
Definition: memory.c:665
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:327
MagickPathExtent
#define MagickPathExtent
Definition: magick-type.h:31