tools/analyse: use a deque to avoid expensive reallocations
We can amass a fair amount of allocated memory on some operations, so a vector resize can exceed the available memory of a system on some operations.
This commit is contained in:
parent
6d584b10ec
commit
bdc4a09356
@ -24,6 +24,7 @@
|
||||
#include <filesystem>
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <deque>
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
@ -64,7 +65,7 @@ static bool region_equal (
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
static void find_path_chunks (
|
||||
std::vector<emory::chunk::region> &res,
|
||||
std::deque<emory::chunk::region> &res,
|
||||
std::filesystem::path const &src,
|
||||
emory::chunk::params const &p
|
||||
);
|
||||
@ -75,7 +76,7 @@ static void find_path_chunks (
|
||||
static
|
||||
void
|
||||
find_regular_chunks (
|
||||
std::vector<emory::chunk::region> &res,
|
||||
std::deque<emory::chunk::region> &res,
|
||||
std::filesystem::path const &src,
|
||||
emory::chunk::params const &p
|
||||
) {
|
||||
@ -96,7 +97,7 @@ find_regular_chunks (
|
||||
static
|
||||
void
|
||||
find_directory_chunks (
|
||||
std::vector<emory::chunk::region> &res,
|
||||
std::deque<emory::chunk::region> &res,
|
||||
std::filesystem::path const &src,
|
||||
emory::chunk::params const &p
|
||||
) {
|
||||
@ -111,7 +112,7 @@ find_directory_chunks (
|
||||
/// Scan chunks from a given path by dispatching to `find_foo_chunks` style
|
||||
/// functions depending on the file type.
|
||||
static void find_path_chunks (
|
||||
std::vector<emory::chunk::region> &res,
|
||||
std::deque<emory::chunk::region> &res,
|
||||
std::filesystem::path const &src,
|
||||
emory::chunk::params const &p
|
||||
) {
|
||||
@ -139,12 +140,12 @@ static void find_path_chunks (
|
||||
|
||||
|
||||
///----------------------------------------------------------------------------
|
||||
/// Find all regions in a path and return a vector of the regions.
|
||||
/// Find all regions in a path and return a container of the regions.
|
||||
static
|
||||
std::vector<emory::chunk::region>
|
||||
std::deque<emory::chunk::region>
|
||||
find_chunks (std::filesystem::path const &src, emory::chunk::params const &p)
|
||||
{
|
||||
std::vector<emory::chunk::region> res;
|
||||
std::deque<emory::chunk::region> res;
|
||||
find_path_chunks (res, src, p);
|
||||
return res;
|
||||
}
|
||||
@ -194,7 +195,7 @@ int main (int argc, char const **argv)
|
||||
|
||||
// Find all the chunks and prepare them for output
|
||||
std::cout << "processing\n";
|
||||
std::vector<emory::chunk::region> src = find_chunks (argv[ARGS_INPUT], p);
|
||||
auto src = find_chunks (argv[ARGS_INPUT], p);
|
||||
|
||||
fmt::print ("analysing {} chunks\n", src.size ());
|
||||
std::sort (src.begin (), src.end (), region_less);
|
||||
|
Loading…
Reference in New Issue
Block a user