The lines in this call stack have "mangled" names. For instance, _ZNSt6vectorI12lattice_typeSaIS0_EE7reserveEm + 114 designates something like vector<lattice_type>::reserve()
Is it really trying to allocate that size? Is gcc really using malloc under all these boost code? :)
Yes, the bottom line is that it throws bad_alloc due to an attmpt to allocate a very large block. In line [12] you can see a call to boost::serialization::stl::reserve_imp<std::vector<lattice_type> >() it's called when Boost.Serialization loads your vector from a stream. However, for some reason it read an incorrect vector size -- perhaps the file is corrupted or there's some version mismatch.
Or loading from a binary_archive that was saved with a different endianess.
Well, according to the call stack, it was mpi::packed_archive. I never used it, but googled-around a bit, and it seems that MPI handles endianness issues automatically, unless BOOST_MPI_HOMOGENOUS is defined.