[zeromq-dev] Memory alignment
Emmanuel TAUREL
taurel at esrf.fr
Thu Jul 7 13:55:17 CEST 2011
Hello once more,
There is one info that I forgot to give you. The message part which is
not aligned on a 4 bytes boundary
is a "small message".
I had a short look in ZMQ source code and I have noticed that it could
explain the behavior that I have noticed.
As far as I have understood the code, the zmq_msg_data() function in
case of small message returns the address of the
buffer named "vsm_data" in the zmq_msg_t structure. Following this
structure definition, this buffer is aligned on
a 2 bytes boundary because it follows 2 unsigned char.
Increasing this message part size to something greater than
ZMQ_MAX_VSM_SIZE (30) should solve my problem.
I should have looked into the code before sending the e-mail !!!
Do you confirm my understanding of this problem?
If yes, how is it possible to send small message which will be received
aligned in a 4 bytes boundary?
Thank's for your answers
Emmanuel Taurel
On 07/07/2011 12:47, Emmanuel TAUREL wrote:
> Hello all,
>
> I am using zeromq 2.1.7. I am using a multipart message sent from a PUB
> socket to some SUB sockets.
> Then, once in the receiver process, the message is sent to worker
> threads using some PUSH/PULL sockets and a zmq queue device to link the
> SUB and the PUSH socket.
> My message has 6 parts. Part 1 and 2 are classical strings, part 3 is
> simply 4 bytes and part 4, 5 and 6 are encoded buffer.
> I am using the C++ binding. Transmission between PUB and SUB works fine.
> However, for subscriber running on the same host than the publisher, the
> message part 4 that I retrieve in the worker thread using a
> zmq::message_t object is returned to me in a buffer aligned in memory in
> a 2 bytes border (address 0xXXX2 and not 0xXXX0 or 0xXXX4).
> I am using the zmq::message_t::data() method to retrieve the memory buffer.
> This behavior disturbs the software which decodes this buffer because it
> assume that the buffer is aligned on a 4 bytes border.
>
> Is there any rule concerning buffer memory alignment within zmq?
> Is there something I can do to retrieve my buffer aligned on a 4 bytes
> border?
>
> Thank's for your answers
>
> Regards
>
> Emmanuel Taurel
>
>
> _______________________________________________
> zeromq-dev mailing list
> zeromq-dev at lists.zeromq.org
> http://lists.zeromq.org/mailman/listinfo/zeromq-dev
More information about the zeromq-dev
mailing list