Dear list, I have tried many ways but could not figure out how to boost::serialize the following object: Basically, to maintain a big chunk of small objects, I use a memory pool to allocate a big trunk of memory and return the pointers to small objects. struct small { int size; int * ptr; init(int s, int* p){ size = s; ptr = p; } } struct All { vector<int> data; vector<small> objs; All(int num_obj, int size_obj) { data.resize( num_obj * size_obj); for(int i=0; i<num_obj; i++) objs[i].init( size_obj, &data[i* size_obj]); } } It is easy to serialize All::data but how to deal with small::ptr is beyond me. I tried the following ways: 1. in small ar & size & ptr. --- template expansion error. 2. in small ar & size & reinterpret_cast<unsigned int>ptr --- core dump. What I am trying to do in 2 is that in load(....), I want to ar & objs; /// get the number of old pointer back. find the smallest number of objs[i].ptr relocate objs[i].ptr to &data[0] + objs[i].ptr - smallest point. However, I can not do this in the load(...) function. The template expansion does not allow changes to objs (this does not make sense to me though). 3. ignore ptr --- can compile, core dump. Can someone give me a bit of insights how I can make things work? Thanks.