MagickCore  6.9.10
Convert, Edit, Or Compose Bitmap Images
memory.c File Reference
Include dependency graph for memory.c:

Data Structures

struct  _DataSegmentInfo
 
struct  _MagickMemoryMethods
 
struct  _MemoryInfo
 
struct  _MemoryPool
 

Macros

#define BlockFooter(block, size)   ((size_t *) ((char *) (block)+(size)-2*sizeof(size_t)))
 
#define BlockHeader(block)   ((size_t *) (block)-1)
 
#define BlockSize   4096
 
#define BlockThreshold   1024
 
#define MaxBlockExponent   16
 
#define MaxBlocks   ((BlockThreshold/(4*sizeof(size_t)))+MaxBlockExponent+1)
 
#define MaxSegments   1024
 
#define MemoryGuard   ((0xdeadbeef << 31)+0xdeafdeed)
 
#define NextBlock(block)   ((char *) (block)+SizeOfBlock(block))
 
#define NextBlockInList(block)   (*(void **) (block))
 
#define PreviousBlock(block)   ((char *) (block)-(*((size_t *) (block)-2)))
 
#define PreviousBlockBit   0x01
 
#define PreviousBlockInList(block)   (*((void **) (block)+1))
 
#define SegmentSize   (2*1024*1024)
 
#define SizeMask   (~0x01)
 
#define SizeOfBlock(block)   (*BlockHeader(block) & SizeMask)
 
#define AlignedExtent(size, alignment)   (((size)+((alignment)-1)) & ~((alignment)-1))
 

Typedefs

typedef struct _DataSegmentInfo DataSegmentInfo
 
typedef struct _MagickMemoryMethods MagickMemoryMethods
 
typedef struct _MemoryPool MemoryPool
 

Enumerations

enum  VirtualMemoryType { UndefinedVirtualMemory, AlignedVirtualMemory, MapVirtualMemory, UnalignedVirtualMemory }
 

Functions

MagickExport void * AcquireAlignedMemory (const size_t count, const size_t quantum)
 
MagickExport void * AcquireMagickMemory (const size_t size)
 
MagickExport void * AcquireQuantumMemory (const size_t count, const size_t quantum)
 
static size_t StringToSizeType (const char *string, const double interval)
 
MagickExport MemoryInfoAcquireVirtualMemory (const size_t count, const size_t quantum)
 
MagickExport void * CopyMagickMemory (void *destination, const void *source, const size_t size)
 
MagickExport void DestroyMagickMemory (void)
 
MagickExport void GetMagickMemoryMethods (AcquireMemoryHandler *acquire_memory_handler, ResizeMemoryHandler *resize_memory_handler, DestroyMemoryHandler *destroy_memory_handler)
 
MagickExport size_t GetMaxMemoryRequest (void)
 
MagickExport void * GetVirtualMemoryBlob (const MemoryInfo *memory_info)
 
MagickExport MagickBooleanType HeapOverflowSanityCheck (const size_t count, const size_t quantum)
 
MagickExport void * RelinquishAlignedMemory (void *memory)
 
MagickExport void * RelinquishMagickMemory (void *memory)
 
MagickExport MemoryInfoRelinquishVirtualMemory (MemoryInfo *memory_info)
 
MagickExport void * ResetMagickMemory (void *memory, int byte, const size_t size)
 
MagickExport void * ResizeMagickMemory (void *memory, const size_t size)
 
MagickExport void * ResizeQuantumMemory (void *memory, const size_t count, const size_t quantum)
 
MagickExport void SetMagickMemoryMethods (AcquireMemoryHandler acquire_memory_handler, ResizeMemoryHandler resize_memory_handler, DestroyMemoryHandler destroy_memory_handler)
 

Variables

static size_t max_memory_request = 0
 
static size_t virtual_anonymous_memory = 0
 
static MagickMemoryMethods memory_methods
 

Macro Definition Documentation

◆ AlignedExtent

#define AlignedExtent (   size,
  alignment 
)    (((size)+((alignment)-1)) & ~((alignment)-1))

Referenced by AcquireAlignedMemory().

◆ BlockFooter

#define BlockFooter (   block,
  size 
)    ((size_t *) ((char *) (block)+(size)-2*sizeof(size_t)))

◆ BlockHeader

#define BlockHeader (   block)    ((size_t *) (block)-1)

◆ BlockSize

#define BlockSize   4096

◆ BlockThreshold

#define BlockThreshold   1024

Referenced by AcquireAlignedMemory().

◆ MaxBlockExponent

#define MaxBlockExponent   16

Referenced by AcquireAlignedMemory().

◆ MaxBlocks

#define MaxBlocks   ((BlockThreshold/(4*sizeof(size_t)))+MaxBlockExponent+1)

◆ MaxSegments

#define MaxSegments   1024

◆ MemoryGuard

#define MemoryGuard   ((0xdeadbeef << 31)+0xdeafdeed)

◆ NextBlock

#define NextBlock (   block)    ((char *) (block)+SizeOfBlock(block))

◆ NextBlockInList

#define NextBlockInList (   block)    (*(void **) (block))

Referenced by AcquireAlignedMemory().

◆ PreviousBlock

#define PreviousBlock (   block)    ((char *) (block)-(*((size_t *) (block)-2)))

Referenced by RelinquishMagickMemory().

◆ PreviousBlockBit

#define PreviousBlockBit   0x01

◆ PreviousBlockInList

#define PreviousBlockInList (   block)    (*((void **) (block)+1))

Referenced by AcquireAlignedMemory().

◆ SegmentSize

#define SegmentSize   (2*1024*1024)

◆ SizeMask

#define SizeMask   (~0x01)

◆ SizeOfBlock

#define SizeOfBlock (   block)    (*BlockHeader(block) & SizeMask)

Typedef Documentation

◆ DataSegmentInfo

◆ MagickMemoryMethods

◆ MemoryPool

typedef struct _MemoryPool MemoryPool

Enumeration Type Documentation

◆ VirtualMemoryType

Enumerator
UndefinedVirtualMemory 
AlignedVirtualMemory 
MapVirtualMemory 
UnalignedVirtualMemory 

Function Documentation

◆ AcquireAlignedMemory()

◆ AcquireMagickMemory()

MagickExport void* AcquireMagickMemory ( const size_t  size)

References _MagickMemoryMethods::acquire_memory_handler, ActivateSemaphoreInfo(), _MemoryPool::allocation, _MemoryPool::blocks, LockSemaphoreInfo(), MagickFalse, MaxBlocks, MaxSegments, memory_methods, _DataSegmentInfo::next, _DataSegmentInfo::previous, _MemoryPool::segment_pool, SegmentSize, SizeMask, and UnlockSemaphoreInfo().

Referenced by AcquireCoderCache(), AcquireColorCache(), AcquireConfigureCache(), AcquireCriticalMemory(), AcquireDistributeCacheInfo(), AcquireExceptionInfo(), AcquireFxInfo(), AcquireImageInfo(), AcquireKernelBuiltIn(), AcquireLogCache(), AcquireMagicCache(), AcquireMatrixInfo(), AcquirePixelList(), AcquirePolicyCache(), AcquireQuantizeInfo(), AcquireQuantumInfo(), AcquireQuantumMemory(), AcquireRandomInfo(), AcquireResampleFilter(), AcquireResizeFilter(), AcquireSignatureInfo(), AcquireStreamInfo(), AcquireStringInfoContainer(), AcquireTimerInfo(), AcquireTokenInfo(), AddChildToXMLTree(), AddValueToSplayTree(), AppendValueToLinkedList(), Ascii85Initialize(), CheckImageColors(), Classify(), CloneBlobInfo(), CloneExceptionInfo(), CloneImageView(), CloneKernelInfo(), CloneMontageInfo(), CloneQuantizeInfo(), ConvertPathToPolygon(), DrawImage(), GetCubeInfo(), GetImageAttribute(), GetImageDynamicThreshold(), GetNodeInfo(), GetThresholdMapFile(), GetTypeList(), InitializeIntervalTree(), InsertValueInLinkedList(), InsertValueInSortedLinkedList(), IsHistogramImage(), ListFiles(), LoadCoderCache(), LoadColorCache(), LoadConfigureCache(), LoadDelegateCache(), LoadLocaleCache(), LoadLogCache(), LoadMagicCache(), LoadMimeCache(), LoadPolicyCache(), LoadTypeCache(), MagickCreateThreadKey(), NewHashmap(), NewImageView(), NewImageViewRegion(), NewLinkedList(), NewSplayTree(), NewXMLTreeTag(), ParseInternalDoctype(), ParseKernelArray(), ParseProcessingInstructions(), PutEntryInHashmap(), ReacquireMemory(), RenderHoughLines(), ResizeMagickMemory(), SetMagickInfo(), and ThrowException().

◆ AcquireQuantumMemory()

MagickExport void* AcquireQuantumMemory ( const size_t  count,
const size_t  quantum 
)

References AcquireMagickMemory(), HeapOverflowSanityCheck(), and MagickFalse.

Referenced by AcquireContributionThreadSet(), AcquireFxInfo(), AcquireFxThreadSet(), AcquireHistogramThreadSet(), AcquireImageColormap(), AcquireMagickMatrix(), AcquirePixelCacheNexus(), AcquirePixelListThreadSet(), AcquirePixelThreadSet(), AcquirePolygonThreadSet(), AcquireQuantumPixels(), AcquireSignatureInfo(), AcquireString(), AcquireStringInfo(), AcquireUniqueSymbolicLink(), AcquireVirtualMemory(), AllocateString(), AutoThresholdImage(), BalanceSplayTree(), Base64Decode(), Base64Encode(), BlobToStringInfo(), Classify(), ClassifyImageColors(), CloneDrawInfo(), CloneImage(), ClonePixelCacheOnDisk(), ClutImageChannel(), ColorDecisionListImage(), ColorFloodfillImage(), CompareImageLayers(), ConfigureFileToStringInfo(), ConnectedComponentsImage(), ConstantString(), ContrastStretchImageChannel(), ConvertLatin1ToUTF8(), ConvertPathToPolygon(), ConvertPrimitiveToPath(), ConvertUTF16ToUTF8(), CopyDelegateFile(), CreateMagickThreadKey(), DeleteImages(), DeskewImage(), DistortImage(), DrawDashPolygon(), DrawImage(), EqualizeImageChannel(), EscapeParenthesis(), EscapeString(), ExpandFilenames(), ExportImagePixels(), FileToBlob(), FileToImage(), FileToXML(), GammaImageChannel(), GaussJordanElimination(), GenerateCoefficients(), Get8BIMProperty(), GetCoderInfoList(), GetCoderList(), GetColorInfoList(), GetColorList(), GetCommandOptions(), GetConfigureInfoList(), GetConfigureList(), GetDelegateInfoList(), GetDelegateList(), GetExecutionPath(), GetEXIFProperty(), GetImageChannelDepth(), GetImageChannelDistortion(), GetImageChannelDistortions(), GetImageChannelFeatures(), GetImageChannelMoments(), GetImageChannelPerceptualHash(), GetImageChannelStatistics(), GetImageDynamicThreshold(), GetImageHistogram(), GetImageViewException(), GetIPTCProperty(), GetLocaleInfoList(), GetLocaleList(), GetLocationStatistics(), GetLogInfoList(), GetLogList(), GetMagicInfoList(), GetMagickInfoList(), GetMagickList(), GetMagicList(), GetMimeInfoList(), GetMimeList(), GetNextImageProfile(), GetNodeInfo(), GetPathComponents(), GetPolicyInfoList(), GetPolicyList(), GetThresholdMapFile(), GetTypeInfoList(), GetTypeList(), GradientImage(), HuffmanDecodeImage(), HuffmanEncodeImage(), IdentifyImage(), ImageListToArray(), ImagesToBlob(), ImageToBlob(), ImageToFile(), ImportImagePixels(), IncreaseHashmapCapacity(), InitializeIntervalTree(), InjectImageBlob(), IterateOverSplayTree(), KapurThreshold(), LinearStretchImage(), ListFiles(), LZWEncodeImage(), MagickReadDirectory(), MatteFloodfillImage(), MontageImageList(), MorphologyPrimitive(), MotionBlurImageChannel(), NewHashmap(), NewXMLTree(), OpenCacheView(), OptimalTau(), OptimizeLayerFrames(), OTSUThreshold(), PackbitsEncodeImage(), ParseEntities(), ParseInternalDoctype(), ParseProcessingInstructions(), ReduceImageColors(), RenderType(), RGBTransformImage(), RotationalBlurImageChannel(), SampleImage(), ScaleImage(), ScaleSpace(), SegmentImage(), SetGrayscaleImage(), SetImageChannelDepth(), SetStringInfoLength(), SetXMLTreeAttribute(), SigmoidalContrastImageChannel(), SortColormapByIntensity(), StreamImagePixels(), StringInfoToHexString(), StringInfoToString(), StringToArgv(), StringToArrayOfDoubles(), StringToList(), TraceBezier(), TraceStrokePolygon(), TransformRGBImage(), WaveImage(), and WaveletDenoiseImage().

◆ AcquireVirtualMemory()

◆ CopyMagickMemory()

MagickExport void* CopyMagickMemory ( void *  destination,
const void *  source,
const size_t  size 
)

◆ DestroyMagickMemory()

◆ GetMagickMemoryMethods()

MagickExport void GetMagickMemoryMethods ( AcquireMemoryHandler acquire_memory_handler,
ResizeMemoryHandler resize_memory_handler,
DestroyMemoryHandler destroy_memory_handler 
)

◆ GetMaxMemoryRequest()

MagickExport size_t GetMaxMemoryRequest ( void  )

◆ GetVirtualMemoryBlob()

◆ HeapOverflowSanityCheck()

MagickExport MagickBooleanType HeapOverflowSanityCheck ( const size_t  count,
const size_t  quantum 
)

◆ RelinquishAlignedMemory()

◆ RelinquishMagickMemory()

MagickExport void* RelinquishMagickMemory ( void *  memory)

References BlockFooter, BlockHeader, _MagickMemoryMethods::destroy_memory_handler, LockSemaphoreInfo(), memory_methods, _DataSegmentInfo::next, NextBlock, _DataSegmentInfo::previous, PreviousBlock, PreviousBlockBit, SizeMask, SizeOfBlock, and UnlockSemaphoreInfo().

Referenced by access_utf8(), AcquireCoderCache(), AcquireFxInfo(), AcquireMagickMatrix(), AcquirePolygonThreadSet(), AcquireUniqueSymbolicLink(), AddPathToXMLTree(), AnnotateImage(), AutoThresholdImage(), BalanceSplayTree(), Base64Decode(), CanonicalXMLContent(), Classify(), ClearLinkedList(), ClonePixelCacheOnDisk(), ClutImageChannel(), ColorDecisionListImage(), ColorFloodfillImage(), CompareImageLayers(), ConnectedComponentsImage(), ContrastStretchImageChannel(), ConvertPathToPolygon(), CopyDelegateFile(), CreateMagickThreadKey(), DeleteImages(), DeleteMagickThreadKey(), DeleteNodeByValueFromSplayTree(), DeleteNodeFromSplayTree(), DeskewImage(), DestroyAttribute(), DestroyBlob(), DestroyCoderNode(), DestroyColorCube(), DestroyColorElement(), DestroyConfigureElement(), DestroyContributionThreadSet(), DestroyCubeInfo(), DestroyDelegate(), DestroyDistributeCacheInfo(), DestroyDrawInfo(), DestroyEdge(), DestroyExceptionElement(), DestroyExceptionInfo(), DestroyFxInfo(), DestroyFxThreadSet(), DestroyHashmap(), DestroyHistogramThreadSet(), DestroyImage(), DestroyImageInfo(), DestroyImageView(), DestroyKernelInfo(), DestroyLinkedList(), DestroyLocaleNode(), DestroyLogElement(), DestroyMagicElement(), DestroyMagickNode(), DestroyMatrixInfo(), DestroyMimeElement(), DestroyMontageInfo(), DestroyPixelCache(), DestroyPixelCacheNexus(), DestroyPixelList(), DestroyPixelListThreadSet(), DestroyPixelStream(), DestroyPixelThreadSet(), DestroyPolicyElement(), DestroyPolygonInfo(), DestroyPolygonThreadSet(), DestroyQuantizeInfo(), DestroyQuantumInfo(), DestroyQuantumPixels(), DestroyRandomInfo(), DestroyRegistryNode(), DestroyResampleFilter(), DestroyResizeFilter(), DestroySignatureInfo(), DestroySplayTree(), DestroyStreamInfo(), DestroyString(), DestroyStringInfo(), DestroyStringList(), DestroyThresholdMap(), DestroyTimerInfo(), DestroyTokenInfo(), DestroyTypeNode(), DestroyXMLTree(), DestroyXMLTreeAttributes(), DestroyXMLTreeRoot(), DistortImage(), DrawDashPolygon(), DrawImage(), DrawStrokePolygon(), EqualizeImageChannel(), ExpandFilenames(), ExportImagePixels(), ExternalDelegateCommand(), FileToBlob(), FileToImage(), FileToXML(), fopen_utf8(), FreeNodes(), GammaImageChannel(), GaussJordanElimination(), GenerateCoefficients(), GetConfigureOptions(), GetConfigurePaths(), GetDelegateCommand(), GetExecutionPath(), GetHostname(), GetImageAttribute(), GetImageChannelDepth(), GetImageChannelDistortion(), GetImageChannelDistortions(), GetImageChannelEntropy(), GetImageChannelFeatures(), GetImageChannelMean(), GetImageChannelMoments(), GetImageChannelPerceptualHash(), GetImageChannelStatistics(), GetImageDynamicThreshold(), GetLocaleOptions(), GetMagickHomeURL(), GetMultilineTypeMetrics(), GetMVGMacros(), GetNextImageProfile(), GetNormalizedCrossCorrelationDistortion(), GetNumberColors(), GetPerceptualHashDistortion(), GetXMLTreePath(), GetXMPProperty(), HuffmanDecodeImage(), HuffmanEncodeImage(), IdentifyImage(), ImagesToBlob(), ImageToBlob(), ImageToFile(), ImportImagePixels(), IncreaseHashmapCapacity(), InitializeIntervalTree(), InjectImageBlob(), InsertValueInSortedLinkedList(), InvokeDelegate(), IsOptionMember(), IterateOverSplayTree(), KapurThreshold(), LinearStretchImage(), ListCoderInfo(), ListColorInfo(), ListConfigureInfo(), ListDelegateInfo(), ListFiles(), ListLocaleInfo(), ListLogInfo(), ListMagicInfo(), ListMagickInfo(), ListMimeInfo(), ListPolicyInfo(), ListTypeInfo(), LoadCoderCache(), LoadColorCache(), LoadConfigureCache(), LoadDelegateCache(), LoadLocaleCache(), LoadLogCache(), LoadMagicCache(), LoadPolicyCache(), LoadTypeCache(), LogMagickEventList(), LZWEncodeImage(), MagickDeleteThreadKey(), MagickReadDirectory(), MatteFloodfillImage(), MontageImageList(), MorphologyPrimitive(), MotionBlurImageChannel(), open_utf8(), OpenMagickStream(), OptimalTau(), OptimizeLayerFrames(), OTSUThreshold(), PackbitsEncodeImage(), ParseInternalDoctype(), popen_utf8(), PreviewImage(), PutEntryInHashmap(), ReacquireMemory(), ReadInlineImage(), ReduceImageColors(), RelinquishMagickMatrix(), RelinquishVirtualMemory(), remove_utf8(), RemoveElementByValueFromLinkedList(), RemoveElementFromLinkedList(), RemoveEntryFromHashmap(), RemoveLastElementFromLinkedList(), RemoveNodeByValueFromSplayTree(), RemoveNodeFromSplayTree(), rename_utf8(), RenderType(), ResetSplayTree(), ResizeMagickMemory(), ResizeQuantumMemory(), RGBTransformImage(), RotationalBlurImageChannel(), SampleImage(), ScaleImage(), ScaleSpace(), SegmentImage(), SetGrayscaleImage(), SetImageArtifact(), SetImageChannelDepth(), SetImageOption(), SetImageProfileInternal(), SetImageProperty(), SetImageRegistry(), SetPixelCacheVirtualMethod(), SigmoidalContrastImageChannel(), SortColormapByIntensity(), SparseColorImage(), stat_utf8(), StreamImagePixels(), StringToArgv(), TraceBezier(), TraceStrokePolygon(), TransformImages(), TransformRGBImage(), WaveImage(), and WaveletDenoiseImage().

◆ RelinquishVirtualMemory()

◆ ResetMagickMemory()

MagickExport void* ResetMagickMemory ( void *  memory,
int  byte,
const size_t  size 
)

◆ ResizeMagickMemory()

◆ ResizeQuantumMemory()

◆ SetMagickMemoryMethods()

◆ StringToSizeType()

static size_t StringToSizeType ( const char *  string,
const double  interval 
)
inlinestatic

Variable Documentation

◆ max_memory_request

size_t max_memory_request = 0
static

Referenced by GetMaxMemoryRequest().

◆ memory_methods

MagickMemoryMethods memory_methods
static
Initial value:
=
{
}
void *(* AcquireMemoryHandler)(size_t) magick_alloc_size(1)
Definition: memory_.h:29
void *(*)(* DestroyMemoryHandler)(void *)
Definition: memory_.h:30
void *(*)(*) *(* ResizeMemoryHandler)(void *, size_t) magick_alloc_size(2)
Definition: memory_.h:31

Referenced by AcquireMagickMemory(), DestroyMagickMemory(), GetMagickMemoryMethods(), RelinquishMagickMemory(), ResizeMagickMemory(), and SetMagickMemoryMethods().

◆ virtual_anonymous_memory

size_t virtual_anonymous_memory = 0
static

Referenced by AcquireVirtualMemory().