1e41f4b71Sopenharmony_ci# Memory 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci 4e41f4b71Sopenharmony_ci## Overview 5e41f4b71Sopenharmony_ci 6e41f4b71Sopenharmony_ciProvides APIs for memory management. 7e41f4b71Sopenharmony_ci 8e41f4b71Sopenharmony_ci@Syscap SystemCapability.CommonLibrary.PurgeableMemory 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci**Since** 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci10 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci## Summary 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ci 18e41f4b71Sopenharmony_ci### Files 19e41f4b71Sopenharmony_ci 20e41f4b71Sopenharmony_ci| Name| Description| 21e41f4b71Sopenharmony_ci| -------- | -------- | 22e41f4b71Sopenharmony_ci| [purgeable_memory.h](purgeable__memory_8h.md) | Declares the APIs for managing purgeable memory at the native layer.<br>**File to include**: <purgeable_memory/purgeable_memory.h><br>**Library**: libpurgeable_memory_ndk.z.so| 23e41f4b71Sopenharmony_ci 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci### Types 26e41f4b71Sopenharmony_ci 27e41f4b71Sopenharmony_ci| Name| Description| 28e41f4b71Sopenharmony_ci| -------- | -------- | 29e41f4b71Sopenharmony_ci| [OH_PurgeableMemory](#oh_purgeablememory) | Defines the type name of the **OH_PurgeableMemory** data.| 30e41f4b71Sopenharmony_ci| (\*[OH_PurgeableMemory_ModifyFunc](#oh_purgeablememory_modifyfunc)) (void \*, size_t, void \*) | Defines the function for rebuilding purgeable memory data.| 31e41f4b71Sopenharmony_ci 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci### Functions 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_ci| Name| Description| 36e41f4b71Sopenharmony_ci| -------- | -------- | 37e41f4b71Sopenharmony_ci| \*[OH_PurgeableMemory_Create](#oh_purgeablememory_create) (size_t size, [OH_PurgeableMemory_ModifyFunc](#oh_purgeablememory_modifyfunc) func, void \*funcPara) | Creates a **PurgeableMemory** object.| 38e41f4b71Sopenharmony_ci| [OH_PurgeableMemory_Destroy](#oh_purgeablememory_destroy) ([OH_PurgeableMemory](#oh_purgeablememory) \*purgObj) | Destroys a **PurgeableMemory** object.| 39e41f4b71Sopenharmony_ci| [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.| 40e41f4b71Sopenharmony_ci| [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.| 41e41f4b71Sopenharmony_ci| [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.| 42e41f4b71Sopenharmony_ci| [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.| 43e41f4b71Sopenharmony_ci| [OH_PurgeableMemory_GetContent](#oh_purgeablememory_getcontent) ([OH_PurgeableMemory](#oh_purgeablememory) \*purgObj) | Obtains the memory data of a **PurgeableMemory** object.| 44e41f4b71Sopenharmony_ci| [OH_PurgeableMemory_ContentSize](#oh_purgeablememory_contentsize) ([OH_PurgeableMemory](#oh_purgeablememory) \*purgObj) | Obtains the memory data size of a **PurgeableMemory** object.| 45e41f4b71Sopenharmony_ci| [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.| 46e41f4b71Sopenharmony_ci 47e41f4b71Sopenharmony_ci 48e41f4b71Sopenharmony_ci## Type Description 49e41f4b71Sopenharmony_ci 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci### OH_PurgeableMemory 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci 54e41f4b71Sopenharmony_ci``` 55e41f4b71Sopenharmony_citypedef struct PurgMem OH_PurgeableMemory 56e41f4b71Sopenharmony_ci``` 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci**Description** 59e41f4b71Sopenharmony_ci 60e41f4b71Sopenharmony_ciDefines the type name of the **OH_PurgeableMemory** data. 61e41f4b71Sopenharmony_ci 62e41f4b71Sopenharmony_ci**Since** 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci10 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ci 67e41f4b71Sopenharmony_ci### OH_PurgeableMemory_ModifyFunc 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ci 70e41f4b71Sopenharmony_ci``` 71e41f4b71Sopenharmony_citypedef bool(* OH_PurgeableMemory_ModifyFunc) (void *, size_t, void *) 72e41f4b71Sopenharmony_ci``` 73e41f4b71Sopenharmony_ci 74e41f4b71Sopenharmony_ci**Description** 75e41f4b71Sopenharmony_ci 76e41f4b71Sopenharmony_ciDefines the function for rebuilding purgeable memory data. 77e41f4b71Sopenharmony_ci 78e41f4b71Sopenharmony_ci**Parameters** 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci| Name| Description| 81e41f4b71Sopenharmony_ci| -------- | -------- | 82e41f4b71Sopenharmony_ci| void \* | Pointer to the address of purgeable memory.| 83e41f4b71Sopenharmony_ci| size_t | Size of the memory data to rebuild.| 84e41f4b71Sopenharmony_ci| void \* | Pointer to the parameters used for rebuilding.| 85e41f4b71Sopenharmony_ci 86e41f4b71Sopenharmony_ci**Returns** 87e41f4b71Sopenharmony_ci 88e41f4b71Sopenharmony_ciReturns a success message if the operation is successful; returns a failure message otherwise. 89e41f4b71Sopenharmony_ci 90e41f4b71Sopenharmony_ci**Since** 91e41f4b71Sopenharmony_ci 92e41f4b71Sopenharmony_ci10 93e41f4b71Sopenharmony_ci 94e41f4b71Sopenharmony_ci 95e41f4b71Sopenharmony_ci## Function Description 96e41f4b71Sopenharmony_ci 97e41f4b71Sopenharmony_ci 98e41f4b71Sopenharmony_ci### OH_PurgeableMemory_AppendModify() 99e41f4b71Sopenharmony_ci 100e41f4b71Sopenharmony_ci 101e41f4b71Sopenharmony_ci``` 102e41f4b71Sopenharmony_cibool OH_PurgeableMemory_AppendModify (OH_PurgeableMemory * purgObj, OH_PurgeableMemory_ModifyFunc func, void * funcPara ) 103e41f4b71Sopenharmony_ci``` 104e41f4b71Sopenharmony_ci 105e41f4b71Sopenharmony_ci**Description** 106e41f4b71Sopenharmony_ci 107e41f4b71Sopenharmony_ciAdds a function for modifying a **PurgeableMemory** object. 108e41f4b71Sopenharmony_ci 109e41f4b71Sopenharmony_ci**Parameters** 110e41f4b71Sopenharmony_ci 111e41f4b71Sopenharmony_ci| Name| Description| 112e41f4b71Sopenharmony_ci| -------- | -------- | 113e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 114e41f4b71Sopenharmony_ci| func | Function pointer to the modify function, which is used for further modification after the purgeable memory data is rebuilt.| 115e41f4b71Sopenharmony_ci| funcPara | Pointer to the parameters of the modify function.| 116e41f4b71Sopenharmony_ci 117e41f4b71Sopenharmony_ci**Returns** 118e41f4b71Sopenharmony_ci 119e41f4b71Sopenharmony_ciReturns a success message if the operation is successful; returns a failure message otherwise. 120e41f4b71Sopenharmony_ci 121e41f4b71Sopenharmony_ci**Since** 122e41f4b71Sopenharmony_ci 123e41f4b71Sopenharmony_ci10 124e41f4b71Sopenharmony_ci 125e41f4b71Sopenharmony_ci 126e41f4b71Sopenharmony_ci### OH_PurgeableMemory_BeginRead() 127e41f4b71Sopenharmony_ci 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci``` 130e41f4b71Sopenharmony_cibool OH_PurgeableMemory_BeginRead (OH_PurgeableMemory * purgObj) 131e41f4b71Sopenharmony_ci``` 132e41f4b71Sopenharmony_ci 133e41f4b71Sopenharmony_ci**Description** 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ciStarts a read operation on a **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it. 136e41f4b71Sopenharmony_ci 137e41f4b71Sopenharmony_ci**Parameters** 138e41f4b71Sopenharmony_ci 139e41f4b71Sopenharmony_ci| Name| Description| 140e41f4b71Sopenharmony_ci| -------- | -------- | 141e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 142e41f4b71Sopenharmony_ci 143e41f4b71Sopenharmony_ci**Returns** 144e41f4b71Sopenharmony_ci 145e41f4b71Sopenharmony_ciReturns 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. 146e41f4b71Sopenharmony_ci 147e41f4b71Sopenharmony_ci**Since** 148e41f4b71Sopenharmony_ci 149e41f4b71Sopenharmony_ci10 150e41f4b71Sopenharmony_ci 151e41f4b71Sopenharmony_ci 152e41f4b71Sopenharmony_ci### OH_PurgeableMemory_BeginWrite() 153e41f4b71Sopenharmony_ci 154e41f4b71Sopenharmony_ci 155e41f4b71Sopenharmony_ci``` 156e41f4b71Sopenharmony_cibool OH_PurgeableMemory_BeginWrite (OH_PurgeableMemory * purgObj) 157e41f4b71Sopenharmony_ci``` 158e41f4b71Sopenharmony_ci 159e41f4b71Sopenharmony_ci**Description** 160e41f4b71Sopenharmony_ci 161e41f4b71Sopenharmony_ciBegins a write operation on the **PurgeableMemory** object. If purgeable memory is reclaimed, the rebuilding function is called to rebuild it. 162e41f4b71Sopenharmony_ci 163e41f4b71Sopenharmony_ci**Parameters** 164e41f4b71Sopenharmony_ci 165e41f4b71Sopenharmony_ci| Name| Description| 166e41f4b71Sopenharmony_ci| -------- | -------- | 167e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 168e41f4b71Sopenharmony_ci 169e41f4b71Sopenharmony_ci**Returns** 170e41f4b71Sopenharmony_ci 171e41f4b71Sopenharmony_ciReturns 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. 172e41f4b71Sopenharmony_ci 173e41f4b71Sopenharmony_ci**Since** 174e41f4b71Sopenharmony_ci 175e41f4b71Sopenharmony_ci10 176e41f4b71Sopenharmony_ci 177e41f4b71Sopenharmony_ci 178e41f4b71Sopenharmony_ci### OH_PurgeableMemory_ContentSize() 179e41f4b71Sopenharmony_ci 180e41f4b71Sopenharmony_ci 181e41f4b71Sopenharmony_ci``` 182e41f4b71Sopenharmony_cisize_t OH_PurgeableMemory_ContentSize (OH_PurgeableMemory * purgObj) 183e41f4b71Sopenharmony_ci``` 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_ci**Description** 186e41f4b71Sopenharmony_ci 187e41f4b71Sopenharmony_ciObtains the memory data size of a **PurgeableMemory** object. 188e41f4b71Sopenharmony_ci 189e41f4b71Sopenharmony_ci**Parameters** 190e41f4b71Sopenharmony_ci 191e41f4b71Sopenharmony_ci| Name| Description| 192e41f4b71Sopenharmony_ci| -------- | -------- | 193e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 194e41f4b71Sopenharmony_ci 195e41f4b71Sopenharmony_ci**Returns** 196e41f4b71Sopenharmony_ci 197e41f4b71Sopenharmony_ciReturns the memory data size. 198e41f4b71Sopenharmony_ci 199e41f4b71Sopenharmony_ci**Since** 200e41f4b71Sopenharmony_ci 201e41f4b71Sopenharmony_ci10 202e41f4b71Sopenharmony_ci 203e41f4b71Sopenharmony_ci 204e41f4b71Sopenharmony_ci### OH_PurgeableMemory_Create() 205e41f4b71Sopenharmony_ci 206e41f4b71Sopenharmony_ci 207e41f4b71Sopenharmony_ci``` 208e41f4b71Sopenharmony_ciOH_PurgeableMemory* OH_PurgeableMemory_Create (size_t size, OH_PurgeableMemory_ModifyFunc func, void * funcPara ) 209e41f4b71Sopenharmony_ci``` 210e41f4b71Sopenharmony_ci 211e41f4b71Sopenharmony_ci**Description** 212e41f4b71Sopenharmony_ci 213e41f4b71Sopenharmony_ciCreates a **PurgeableMemory** object. 214e41f4b71Sopenharmony_ci 215e41f4b71Sopenharmony_ci**Parameters** 216e41f4b71Sopenharmony_ci 217e41f4b71Sopenharmony_ci| Name| Description| 218e41f4b71Sopenharmony_ci| -------- | -------- | 219e41f4b71Sopenharmony_ci| size | Size of the **PurgeableMemory** object.| 220e41f4b71Sopenharmony_ci| func | Function pointer to the rebuilding function, which is used to restore the reclaimed purgeable memory data.| 221e41f4b71Sopenharmony_ci| funcPara | Pointer to the parameters of the rebuilding function.| 222e41f4b71Sopenharmony_ci 223e41f4b71Sopenharmony_ci**Returns** 224e41f4b71Sopenharmony_ci 225e41f4b71Sopenharmony_ciReturns the **PurgeableMemory** object. 226e41f4b71Sopenharmony_ci 227e41f4b71Sopenharmony_ci**Since** 228e41f4b71Sopenharmony_ci 229e41f4b71Sopenharmony_ci10 230e41f4b71Sopenharmony_ci 231e41f4b71Sopenharmony_ci 232e41f4b71Sopenharmony_ci### OH_PurgeableMemory_Destroy() 233e41f4b71Sopenharmony_ci 234e41f4b71Sopenharmony_ci 235e41f4b71Sopenharmony_ci``` 236e41f4b71Sopenharmony_cibool OH_PurgeableMemory_Destroy (OH_PurgeableMemory * purgObj) 237e41f4b71Sopenharmony_ci``` 238e41f4b71Sopenharmony_ci 239e41f4b71Sopenharmony_ci**Description** 240e41f4b71Sopenharmony_ci 241e41f4b71Sopenharmony_ciDestroys a **PurgeableMemory** object. 242e41f4b71Sopenharmony_ci 243e41f4b71Sopenharmony_ci**Parameters** 244e41f4b71Sopenharmony_ci 245e41f4b71Sopenharmony_ci| Name| Description| 246e41f4b71Sopenharmony_ci| -------- | -------- | 247e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 248e41f4b71Sopenharmony_ci 249e41f4b71Sopenharmony_ci**Returns** 250e41f4b71Sopenharmony_ci 251e41f4b71Sopenharmony_ciReturns 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). 252e41f4b71Sopenharmony_ci 253e41f4b71Sopenharmony_ci**Since** 254e41f4b71Sopenharmony_ci 255e41f4b71Sopenharmony_ci10 256e41f4b71Sopenharmony_ci 257e41f4b71Sopenharmony_ci 258e41f4b71Sopenharmony_ci### OH_PurgeableMemory_EndRead() 259e41f4b71Sopenharmony_ci 260e41f4b71Sopenharmony_ci 261e41f4b71Sopenharmony_ci``` 262e41f4b71Sopenharmony_civoid OH_PurgeableMemory_EndRead (OH_PurgeableMemory * purgObj) 263e41f4b71Sopenharmony_ci``` 264e41f4b71Sopenharmony_ci 265e41f4b71Sopenharmony_ci**Description** 266e41f4b71Sopenharmony_ci 267e41f4b71Sopenharmony_ciEnds a read operation on a **PurgeableMemory** object. Now the system can reclaim purgeable memory. 268e41f4b71Sopenharmony_ci 269e41f4b71Sopenharmony_ci**Parameters** 270e41f4b71Sopenharmony_ci 271e41f4b71Sopenharmony_ci| Name| Description| 272e41f4b71Sopenharmony_ci| -------- | -------- | 273e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 274e41f4b71Sopenharmony_ci 275e41f4b71Sopenharmony_ci**Since** 276e41f4b71Sopenharmony_ci 277e41f4b71Sopenharmony_ci10 278e41f4b71Sopenharmony_ci 279e41f4b71Sopenharmony_ci 280e41f4b71Sopenharmony_ci### OH_PurgeableMemory_EndWrite() 281e41f4b71Sopenharmony_ci 282e41f4b71Sopenharmony_ci 283e41f4b71Sopenharmony_ci``` 284e41f4b71Sopenharmony_civoid OH_PurgeableMemory_EndWrite (OH_PurgeableMemory * purgObj) 285e41f4b71Sopenharmony_ci``` 286e41f4b71Sopenharmony_ci 287e41f4b71Sopenharmony_ci**Description** 288e41f4b71Sopenharmony_ci 289e41f4b71Sopenharmony_ciEnds a write operation on the **PurgeableMemory** object. Now the system can reclaim purgeable memory. 290e41f4b71Sopenharmony_ci 291e41f4b71Sopenharmony_ci**Parameters** 292e41f4b71Sopenharmony_ci 293e41f4b71Sopenharmony_ci| Name| Description| 294e41f4b71Sopenharmony_ci| -------- | -------- | 295e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 296e41f4b71Sopenharmony_ci 297e41f4b71Sopenharmony_ci**Since** 298e41f4b71Sopenharmony_ci 299e41f4b71Sopenharmony_ci10 300e41f4b71Sopenharmony_ci 301e41f4b71Sopenharmony_ci 302e41f4b71Sopenharmony_ci### OH_PurgeableMemory_GetContent() 303e41f4b71Sopenharmony_ci 304e41f4b71Sopenharmony_ci 305e41f4b71Sopenharmony_ci``` 306e41f4b71Sopenharmony_civoid* OH_PurgeableMemory_GetContent (OH_PurgeableMemory * purgObj) 307e41f4b71Sopenharmony_ci``` 308e41f4b71Sopenharmony_ci 309e41f4b71Sopenharmony_ci**Description** 310e41f4b71Sopenharmony_ci 311e41f4b71Sopenharmony_ciObtains the memory data of a **PurgeableMemory** object. 312e41f4b71Sopenharmony_ci 313e41f4b71Sopenharmony_ci**Parameters** 314e41f4b71Sopenharmony_ci 315e41f4b71Sopenharmony_ci| Name| Description| 316e41f4b71Sopenharmony_ci| -------- | -------- | 317e41f4b71Sopenharmony_ci| purgObj | Pointer to the **PurgeableMemory** object.| 318e41f4b71Sopenharmony_ci 319e41f4b71Sopenharmony_ci**Returns** 320e41f4b71Sopenharmony_ci 321e41f4b71Sopenharmony_ciReturns the pointer to the purgeable memory address. 322e41f4b71Sopenharmony_ci 323e41f4b71Sopenharmony_ci**Since** 324e41f4b71Sopenharmony_ci 325e41f4b71Sopenharmony_ci10 326