You can use the native purgeable memory APIs to apply for and release purgeable memory.
The following scenarios are common for native purgeable memory development:
* Apply for a **PurgeableMemory** object and write data to the object.
* Release the **PurgeableMemory** object when it is no longer required.
## Available APIs
| API| Description|
| -------- | -------- |
| OH_PurgeableMemory \*OH_PurgeableMemory_Create(size_t size, OH_PurgeableMemory_ModifyFunc func, void \*funcPara) | Creates a **PurgeableMemory** object. A new **PurgeableMemory** object is generated each time this API is called.|
| bool OH_PurgeableMemory_Destroy(OH_PurgeableMemory \*purgObj) | Destroys a **PurgeableMemory** object.|
| bool OH_PurgeableMemory_BeginRead(OH_PurgeableMemory \*purgObj) | Begins a read operation on a **PurgeableMemory** object.|
| void OH_PurgeableMemory_EndRead(OH_PurgeableMemory \*purgObj) | Ends a read operation on a **PurgeableMemory** object and decreases the reference count of the object by 1. When the reference count reaches 0, the object can be reclaimed by the system.|
|bool OH_PurgeableMemory_BeginWrite(OH_PurgeableMemory \*purgObj) | Begins a write operation on a **PurgeableMemory** object.|
|void OH_PurgeableMemory_EndWrite(OH_PurgeableMemory \*purgObj)|Ends a write operation on a **PurgeableMemory** object and decreases the reference count of the object by 1. When the reference count reaches 0, the object can be reclaimed by the system.|
|void \*OH_PurgeableMemory_GetContent(OH_PurgeableMemory \*purgObj)|Obtains the memory data of a **PurgeableMemory** object.|
|size_t OH_PurgeableMemory_ContentSize(OH_PurgeableMemory \*purgObj)|Obtains the memory data size of a **PurgeableMemory** object.|
|bool OH_PurgeableMemory_AppendModify(OH_PurgeableMemory \*purgObj, OH_PurgeableMemory_ModifyFunc func, void \*funcPara)|Adds a function for modifying a **PurgeableMemory** object.|
## How to Develop
The following steps describe how to use the native purgeable memory APIs to apply for a **PurgeableMemory** object, write data to the object, and read data from the object.
1. Declare the rules for creating a **PurgeableMemory** object.
| [OH_PurgeableMemory_Destroy](#oh_purgeablememory_destroy)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj) | Destroys a **PurgeableMemory** object.|
| [OH_PurgeableMemory_BeginRead](#oh_purgeablememory_beginread)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj) | Starts a read operation on a **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it.|
| [OH_PurgeableMemory_EndRead](#oh_purgeablememory_endread)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj) | Ends a read operation on a **PurgeableMemory** object. Now the system can reclaim purgeable memory.|
| [OH_PurgeableMemory_BeginWrite](#oh_purgeablememory_beginwrite)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj) | Begins a write operation on the **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it.|
| [OH_PurgeableMemory_EndWrite](#oh_purgeablememory_endwrite)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj) | Ends a write operation on the **PurgeableMemory** object. Now the system can reclaim purgeable memory.|
| [OH_PurgeableMemory_GetContent](#oh_purgeablememory_getcontent)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj) | Obtains the memory data of a **PurgeableMemory** object.|
| [OH_PurgeableMemory_ContentSize](#oh_purgeablememory_contentsize)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj) | Obtains the memory data size of a **PurgeableMemory** object.|
| [OH_PurgeableMemory_AppendModify](#oh_purgeablememory_appendmodify)([OH_PurgeableMemory](#oh_purgeablememory)\*purgObj, [OH_PurgeableMemory_ModifyFunc](#oh_purgeablememory_modifyfunc) func, void \*funcPara) | Adds a function for modifying a **PurgeableMemory** object.|
Starts a read operation on a **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it.
**Parameters**
| Name| Description|
| -------- | -------- |
| purgObj | Pointer to the **PurgeableMemory** object.|
**Returns**
Returns a success message if the purgeable memory data is ready; returns a failure message if purgeable memory has been reclaimed and fails to be rebuilt.
Begins a write operation on the **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it.
**Parameters**
| Name| Description|
| -------- | -------- |
| purgObj | Pointer to the **PurgeableMemory** object.|
**Returns**
Returns a success message if the purgeable memory data is ready; returns a failure message if purgeable memory has been reclaimed and fails to be rebuilt.
| purgObj | Pointer to the **PurgeableMemory** object.|
**Returns**
Returns a success message if the operation is successful; returns a failure message otherwise. If no value is passed, a failure message is returned. If a success message is returned, the value of **purgObj** will be cleared to avoid Use-After-Free (UAF).
| [OH_PurgeableMemory_Destroy](memory.md#oh_purgeablememory_destroy)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj) | Destroys a **PurgeableMemory** object.|
| [OH_PurgeableMemory_BeginRead](memory.md#oh_purgeablememory_beginread)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj) | Starts a read operation on a **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it.|
| [OH_PurgeableMemory_EndRead](memory.md#oh_purgeablememory_endread)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj) | Ends a read operation on a **PurgeableMemory** object. Now the system can reclaim purgeable memory.|
| [OH_PurgeableMemory_BeginWrite](memory.md#oh_purgeablememory_beginwrite)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj) | Begins a write operation on the **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it.|
| [OH_PurgeableMemory_EndWrite](memory.md#oh_purgeablememory_endwrite)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj) | Ends a write operation on the **PurgeableMemory** object. Now the system can reclaim purgeable memory.|
| [OH_PurgeableMemory_GetContent](memory.md#oh_purgeablememory_getcontent)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj) | Obtains the memory data of a **PurgeableMemory** object.|
| [OH_PurgeableMemory_ContentSize](memory.md#oh_purgeablememory_contentsize)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj) | Obtains the memory data size of a **PurgeableMemory** object.|
| [OH_PurgeableMemory_AppendModify](memory.md#oh_purgeablememory_appendmodify)([OH_PurgeableMemory](memory.md#oh_purgeablememory)\*purgObj, [OH_PurgeableMemory_ModifyFunc](memory.md#oh_purgeablememory_modifyfunc) func, void \*funcPara) | Adds a function for modifying a **PurgeableMemory** object.|