[zeromq-dev] Memory alignment

Martin Sustrik sustrik at 250bpm.com
Fri Jul 8 08:48:54 CEST 2011

Hi Emmanuel,

> 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?

This can't be done in a generic way. When sending messages initialised 
using zmq_msg_init_data() via inproc, you get the same buffer that was 
sent by the sender. I.e. if the sender aligned the buffer in a special 
way, that's what you'll get.

In general, it's advisable to parse the messages in 
alignment-independent manner. 0MQ itself does so for its internal data, 
see src/wire.hpp. That'll make your application more portable.

However, if this is considered an useful optimisation. zmq_msg_t (or 
rather it's equivalent in 3.0) could be restructured in such a way that 
the buffer is located at the beginning of the structure. That way it 
will be aligned in the same way the structures are (see c specs). Note 
though, that this will not be a trivial exercise as you are going to 
mess with compiler's standard way of aligning structure members for 
which there is no standard means in the language.


More information about the zeromq-dev mailing list