# Controlling Memory Allocations

When you create a compression or decompression engine, the `CreateCompressor()` and `CreateDecompressor()` functions normally allocate some memory to hold the state of the engines. The compression engine needs around 50 KB of storage, while the decompressor needs around 5 KB.

If your title has sophisticated memory management needs, you can supply a memory buffer yourself to avoid having the folio allocate any memory. To do this, call the `GetCompressorWorkBufferSize()` routine to obtain the size of the buffer needed for the compression engine, or you can call `GetDecompressorWorkBufferSize()` to get the size of the buffer needed for the decompression engine. Once you have determined the size, then you can allocate a memory buffer, and pass a pointer to the buffer using the `COMP_TAG_WORKBUFFER` tag when you create the compressor or decompressor.

When you supply the work buffer, the Compression folio allocates no, or almost no, resources when a compression or decompression engine is created. This allows your title to control where memory resources come from.