On Sun, 2017-08-20 at 14:27 +0200, Nis Meinert wrote: > Dear all, > > I just have started with zmq and have a basic question concerning the > memory allocation / deallocation: > > My program creates objects of some significant amount of bytes, such > that it turns out be a smoking gun for performance issues. Thus it is > worth to think twice before doing unnecessary memory allocation and > copying. > > What do you think is best practice: > > (1) do not allocate the object on the heap (fast) and copy the object > via memcpy (slow) in order to use it with zmq_send, or > > (2) allocate the object via new on the heap (slow) and use the > technique > of zero-copy (http://zeromq.org/blog:zero-copy) by passing a > respective > deallocater? > > Am I right, that zmq itself does a dynamic memory allocation on the > heap? In this case this bottleneck is not avoidable and (2) is the > better choice... > > Cheers, > Nis
If the payload is 33 bytes or greater (warning: this is an internal implementation detail and subject to change at any time) then the library will malloc a buffer. That is because the sending is asynchronous and might complete long after the program stack frame has gone. If you use the zero-copy APIs then the library will take ownership of your buffer. So it sounds like your guess is correct. -- Kind regards, Luca Boccassi
signature.asc
Description: This is a digitally signed message part
_______________________________________________ zeromq-dev mailing list zeromq-dev@lists.zeromq.org https://lists.zeromq.org/mailman/listinfo/zeromq-dev