来自云风的监测lua内存泄露的工具 lua-snapshot
protobuf内存泄露
void protobuf_ShutdownFile_data_2eproto() { delete HMRequest::default_instance_; delete HMResponse::default_instance_; } void protobuf_AddDesc_data_2eproto() { static bool already_here = false; if (already_here) return; already_here = true; GOOGLE_PROTOBUF_VERIFY_VERSION; #endif // 如果程序退出时不清理,会造成这里内存泄露 HMRequest::default_instance_ = new HMRequest(); HMResponse::default_instance_ = new HMResponse(); HMRequest::default_instance_->InitAsDefaultInstance(); HMResponse::default_instance_->InitAsDefaultInstance(); ::google::protobuf::internal::OnShutdown(&protobuf_ShutdownFile_data_2eproto);// 这里有注册清理函数 }
这段代码是一个由 Protocol Buffers 自动生成的函数,用于向应用程序添加 Protocol Buffers 消息描述符。
当程序退出时,需要主动触发OnShutDown进行清理工作,否则会造成内存的泄露,需要在应用程序退出时手动调用 ::google::protobuf::ShutdownProtobufLibrary()
函数。
发现更多的地方都是单例在退出游戏的时候,没有销毁导致的泄露,这种泄露对游戏运行并没有多大的影响,算是偷懒的行为。
不过类似的泄露,vld都检测出来了,要修复比较恶心,暂时就这样吧。
cocos creator 3.x自己实现的内存泄露检测工具
cocos自己实现的一套,window上使用了第三库 littcmalloc_minimal,谷歌开发的,Android是利用weak symbol,ios本身提供了hook接口。