diff --git a/include/boost/container/experimental/nest.hpp b/include/boost/container/experimental/nest.hpp index cd0e2f8..7e7fc44 100644 --- a/include/boost/container/experimental/nest.hpp +++ b/include/boost/container/experimental/nest.hpp @@ -708,8 +708,10 @@ public: pbb = pbb->next; BOOST_IF_CONSTEXPR(Prefetch) { //Load next critical metadata - block_type& pbn = static_cast(*pbb->next); - BOOST_CONTAINER_NEST_PREFETCH(&pbn.next->mask); + block_base_type& pbn = static_cast(*pbb->next); + //Prefetch the next block's metadata plus the data + BOOST_CONTAINER_NEST_PREFETCH(&pbn.next); + BOOST_CONTAINER_NEST_PREFETCH_BLOCK(&pbn); } mask = pbb->mask; } @@ -730,8 +732,9 @@ public: pbb = pbb->prev; BOOST_IF_CONSTEXPR(Prefetch) { //Load next data - block_type& pbn = static_cast(*pbb->prev); - BOOST_CONTAINER_NEST_PREFETCH(&pbn.prev->mask); + block_base_type& pbn = static_cast(*pbb->prev); + BOOST_CONTAINER_NEST_PREFETCH(&pbn.prev); + BOOST_CONTAINER_NEST_PREFETCH_BLOCK(&pbn); } mask = pbb->mask; } @@ -774,7 +777,7 @@ private: ::type const_block_base_pointer; typedef typename nest_detail::pointer_rebind ::type nonconst_pointer; - typedef nest_detail::block block_type; + typedef nest_detail::block block_type; typedef typename block_base_type::mask_type mask_type; BOOST_STATIC_CONSTEXPR std::size_t N = block_base_type::N;