
Thanks for the quick response and thanks for making this handy library. I turned off message queueing (typedef int no_message_queue) and I'm down to 20 bytes, much better, though still with some unaccounted bytes. I'm looking for a better way. I don't use any attributes, except for event attributes, or submachines. I also don't care about event/state history. This means the only state-related info is the state ID. What about just reading and storing the state ID, and using the stored ID to restore the state next time I need to process an event? I know how to get state ID (current_state()), but how do I set state from ID? Josh On Tue, Nov 13, 2012 at 3:52 PM, Christophe Henry < christophe.j.henry@googlemail.com> wrote:
**
*>*Hi,
I'm using msm to store the state of many small objects. Each one is
around 24 bytes on its own. However, I just found out
from experimentation that a MSM state machine takes many bytes to store. For the following program, the print out is:
entering: State1
104
48
This indicates that the very simple one-state, no-transition, machine is 104 bytes, and takes 48 bytes even to serialized.
The front::state_machine_def, however, is only 1 byte, though I suspect thet real state is stored only
in the 104-byte back::state_machine.
Hi Josh,
It depends on several factors:
- MSM creates all the states at state machine creation and the states live until the state machine is destroyed, so even if the states have no data, it'll be a byte per state.
- you need to keep the id of the current state in each region (int)
- 2 bool for internal implementation details
- a queue for deferred events if you have some in your fsm (if none, MSM will deactivate this, but you'll still pay 1 byte).
- an event queue (enabled by default but you can deactivate it if not needed (see http://svn.boost.org/svn/boost/trunk/libs/msm/doc/HTML/ch03s02.html#d0e1139) but it will still cost 1 byte. Both queues are per default a std::deque, which can be expensive on some systems. You can choose another container if you wish (see http://svn.boost.org/svn/boost/trunk/libs/msm/doc/HTML/ch03s05.html#d0e2680 ).
As you see, if you remove the queues, there is not much more to take away.
Also note that a text archive brings its own costs.
HTH,
Christophe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users