Usage RepeatedPtrField - Advanced memory mgmt

2009-06-16 Thread RobertFach

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

2009-06-16 Thread Kenton Varda
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

2009-06-16 Thread RobertFach

 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

2009-06-16 Thread Kenton Varda
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
-~--~~~~--~~--~--~---