Usage RepeatedPtrField - Advanced memory mgmt
Hi, is there anybody out there who can tell me how the special methods like addcleared(), etc. for repeated field ptr work? I guess I can somehow improve/avoid the allocation overhead, right? Say, I have the following messages, message test { repeated chunk = 1; } message chunk { int value = 1; } The goal is to reduce the memory allocations by using pre-allocated objects. Assume the chunkPtr points to an already allocated object, if I use test.chunk().addAllocated(chunkPtr), does it just attaches the chunkPtr to the reaptedFieldPtr chunk object? Is there any overhead incured by dynamically adding the chunks to the test message? Can I deal with that issue by using the test.chunk().Reserve(xx) method? It seems also that I can maintain a pool of objects by using the addCleared() method, right? This way, future calls to test.chunk().add () will use an element from the pool? I was just wondering about these questions while reading the documentation... maybe you can just tell me if this usage pattern would be ok. Thx for the library and thx for the support Cheers Robert --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Protocol Buffers group. To post to this group, send email to protobuf@googlegroups.com To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~--~~~~--~~--~--~---
Re: Usage RepeatedPtrField - Advanced memory mgmt
Everything you say sounds right. If you want to know precisely what these methods do, or how much overhead they incur, I encourage you to look at the code in repeated_field.h -- it's not very complicated. However, instead of trying to control all this in detail, it's usually easiest to simply make sure that you reuse your protobuf objects. If you parse a message, clear it, and then parse another message into the same object, it will reuse the memory for sub-objects and such which was allocated the first time. This way it's easy to make sure you aren't doing it wrong. On Tue, Jun 16, 2009 at 9:40 AM, RobertFach robert.f...@inf.tu-dresden.dewrote: Hi, is there anybody out there who can tell me how the special methods like addcleared(), etc. for repeated field ptr work? I guess I can somehow improve/avoid the allocation overhead, right? Say, I have the following messages, message test { repeated chunk = 1; } message chunk { int value = 1; } The goal is to reduce the memory allocations by using pre-allocated objects. Assume the chunkPtr points to an already allocated object, if I use test.chunk().addAllocated(chunkPtr), does it just attaches the chunkPtr to the reaptedFieldPtr chunk object? Is there any overhead incured by dynamically adding the chunks to the test message? Can I deal with that issue by using the test.chunk().Reserve(xx) method? It seems also that I can maintain a pool of objects by using the addCleared() method, right? This way, future calls to test.chunk().add () will use an element from the pool? I was just wondering about these questions while reading the documentation... maybe you can just tell me if this usage pattern would be ok. Thx for the library and thx for the support Cheers Robert --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Protocol Buffers group. To post to this group, send email to protobuf@googlegroups.com To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~--~~~~--~~--~--~---
Re: Usage RepeatedPtrField - Advanced memory mgmt
However, instead of trying to control all this in detail, it's usually easiest to simply make sure that you reuse your protobuf objects. If you parse a message, clear it, and then parse another message into the same object, it will reuse the memory for sub-objects and such which was allocated the first time. This way it's easy to make sure you aren't doing it wrong. So if I understood you right, say my example message test contains 10 chunks, if I clear that message and parse another message containing 9 chunks, no allocation would be performed and 1 cleared chunk object would still be in the object pool? Thx, --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Protocol Buffers group. To post to this group, send email to protobuf@googlegroups.com To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~--~~~~--~~--~--~---
Re: Usage RepeatedPtrField - Advanced memory mgmt
On Tue, Jun 16, 2009 at 10:13 AM, RobertFach robert.f...@inf.tu-dresden.dewrote: So if I understood you right, say my example message test contains 10 chunks, if I clear that message and parse another message containing 9 chunks, no allocation would be performed and 1 cleared chunk object would still be in the object pool? Correct. --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups Protocol Buffers group. To post to this group, send email to protobuf@googlegroups.com To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~--~~~~--~~--~--~---