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