X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/33e118c08426a12ed80cd258ff1154f8bc70973b..d33e7a563a884247bff85406dcc589a70a162e79:/src/mc/ChunkedData.hpp diff --git a/src/mc/ChunkedData.hpp b/src/mc/ChunkedData.hpp index dd7c6afcdc..9652ea1095 100644 --- a/src/mc/ChunkedData.hpp +++ b/src/mc/ChunkedData.hpp @@ -10,23 +10,32 @@ #include #include +#include #include #include "src/mc/mc_forward.hpp" -#include "src/mc/AddressSpace.hpp" #include "src/mc/PageStore.hpp" namespace simgrid { namespace mc { -/** A byte-string represented as a sequence of chunks from a PageStor */ +/** A byte-string represented as a sequence of chunks from a PageStore + * + * In order to save memory when taking memory snapshots, a given byte-string + * is split in fixed-size chunks. Identical chunks (either from the same + * snapshot or more probably from different snpashots) share the same memory + * storage. + * + * Thus a chunked is represented as a sequence of indices of each chunk. + */ class ChunkedData { + /** This is where we store the chunks */ PageStore* store_ = nullptr; - /** Indices of the chunks */ + /** Indices of the chunks in the `PageStore` */ std::vector pagenos_; public: - ChunkedData() {} + ChunkedData() = default; void clear() { for (std::size_t pageno : pagenos_) @@ -40,9 +49,10 @@ public: // Copy and move ChunkedData(ChunkedData const& that) + : store_ (that.store_) + , pagenos_(that.pagenos_) + { - store_ = that.store_; - pagenos_ = that.pagenos_; for (std::size_t pageno : pagenos_) store_->ref_page(pageno); } @@ -72,19 +82,23 @@ public: return *this; } + /** How many pages are used */ std::size_t page_count() const { return pagenos_.size(); } + + /** Get a chunk index */ std::size_t pageno(std::size_t i) const { return pagenos_[i]; } + + /** Get a view of the chunk indices */ const std::size_t* pagenos() const { return pagenos_.data(); } - std::size_t* pagenos() { return pagenos_.data(); } + /** Get a a pointer to a chunk */ const void* page(std::size_t i) const { return store_->get_page(pagenos_[i]); } ChunkedData(PageStore& store, AddressSpace& as, - remote_ptr addr, std::size_t page_count, - const std::size_t* ref_page_numbers, const std::uint64_t* pagemap); + RemotePtr addr, std::size_t page_count); }; }