./udpclient/UDPClient.h:157: typedef map<uint32_t, Message> MessageMapAck; --> typedef map<uint32_t, Message*> MessageMapAck;
./udpclient/UDPClient.h:166: typedef map<uint32_t, SafeMessage> MessageMapSafe; ---> typedef map<uint32_t, SafeMessage*> MessageMapSafe;
./udpserver/UDPServerClient.h:166: typedef map<uint32_t, Message> MessageMapSafe; ---> typedef map<uint32_t, Message*> MessageMapSafe;
./udpserver/UDPServerIOThread.h:55: typedef map<uint32_t, Message> MessageMapAck; ---> typedef map<uint32_t, Message*> MessageMapAck;
Please keep in mind, if you add stuff to those maps then you have to release memory eventually also.
Also favoring unordered_map instead of map could help.
You could also benchmark at the end both versions.