X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ab0bf820128e74dc5e7d9e6413b88bca2621a34e..a6683a1cd7515c04a74364c9f991d55d9329a7c5:/src/mc/ChunkedData.hpp diff --git a/src/mc/ChunkedData.hpp b/src/mc/ChunkedData.hpp index 20711dff26..076e607560 100644 --- a/src/mc/ChunkedData.hpp +++ b/src/mc/ChunkedData.hpp @@ -14,16 +14,24 @@ #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: @@ -73,18 +81,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(); } + /** 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); }; }