Thanks for the quick response and thanks for making this handy library.
>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