Arena::CreateMessage和Arena::CreateMaybeMessage都是google::protobuf::Arena类提供的函数,可以用来分配Protobuf消息对象的内存。它们之间的区别在于内存管理方式不同。
Arena::CreateMessage函数会严格地分配一块内存为指定类型的Protobuf消息对象,并在内存用尽时自动扩展分配内存,其他不使用的内存存放在指定的Arena对象中:
google::protobuf::Arena arena;
// create a proto message object
MyProtoMessage* message = google::protobuf::Arena::CreateMessage(&arena);
而Arena::CreateMaybeMessage函数会首先尝试从指定的Arena对象中获取未使用的内存块,并将其重新分配为指定类型的Protobuf消息对象。如果Arena对象中没有可用的内存,则创建新的内存,所以没有内存溢出。
google::protobuf::Arena arena;
// create a proto message object
MyProtoMessage* message = google::protobuf::Arena::CreateMaybeMessage(&arena);