pack
此函数可对对象进行碎片整理(移除动态字段中所有未使用的内存“空洞”)。
对于所有具有动态字段(向量和/或字符串)的类,都会生成 _pack()
方法。
当动态对象在运行时重新分配时,可能会出现碎片化。例如,如果向量大小从 2 增加到 3,为原始元素分配的空间可能会(但不一定)暂时丢失。请注意,这不会造成内存泄漏,而是对象碎片化(当对象被删除时,所有对象页面都会返回到内存池)。
_pack()
方法可对对象进行碎片整理,并移除由 _erase()
方法在运行时创建的所有未使用的“空洞”,以便将已删除且无法访问的元素所占用的空间返回到数据库的空闲内存池。
此 API 常用于应用程序构建特定于应用程序的对象基础“碎片整理器”或“垃圾回收器”。系统范围的垃圾回收器通常需要额外的 CPU 周期来保持数据库不出现碎片化,或者采取措施完全避免动态对象的碎片化。
通过 _pack()
API,SmartEDB提供了一种构建特定于应用程序的“碎片整理器”的方法。
应用程序控制何时调用此方法以及何时进行碎片整理。
MCO_RET classname_pack(
/*IN*/ classname * handle,
/*OUT*/ uint4 * pages_released);
参数
handle
classname *
类句柄类型变量的地址。
pages_released
uint4 *
指向 uint4 类型的指针,用于接收释放回空闲页面池的页面数量。
返回码
没有返回值。