From: Arnaud Giersch Date: Wed, 7 Jul 2021 12:39:50 +0000 (+0200) Subject: Reduce number of unnecessary copies of 'args'. X-Git-Tag: v3.28~30 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/46fe9a9157c135ef89c114e5c8f537a46de19ddc Reduce number of unnecessary copies of 'args'. --- diff --git a/src/smpi/internals/smpi_global.cpp b/src/smpi/internals/smpi_global.cpp index ee5fd23c26..bfe9aa3c57 100644 --- a/src/smpi/internals/smpi_global.cpp +++ b/src/smpi/internals/smpi_global.cpp @@ -294,7 +294,8 @@ using smpi_c_entry_point_type = int (*)(int argc, char** argv); using smpi_fortran_entry_point_type = void (*)(); template -static int smpi_run_entry_point(const F& entry_point, const std::string& executable_path, std::vector args) +static int smpi_run_entry_point(const F& entry_point, const std::string& executable_path, + const std::vector& args) { // copy C strings, we need them writable auto* args4argv = new std::vector(args.size()); @@ -447,7 +448,7 @@ static void smpi_init_privatization_dlopen(const std::string& executable) } simgrid::s4u::Engine::get_instance()->register_default([executable, fdin_size](std::vector args) { - return std::function([executable, fdin_size, args] { + return simgrid::kernel::actor::ActorCode([executable, fdin_size, args = std::move(args)] { static std::size_t rank = 0; // Copy the dynamic library: simgrid::xbt::Path path(executable); @@ -523,7 +524,7 @@ static void smpi_init_privatization_no_dlopen(const std::string& executable) // Execute the same entry point for each simulated process: simgrid::s4u::Engine::get_instance()->register_default([entry_point, executable](std::vector args) { - return std::function([entry_point, executable, args] { + return simgrid::kernel::actor::ActorCode([entry_point, executable, args = std::move(args)] { if (smpi_cfg_privatization() == SmpiPrivStrategies::MMAP) { simgrid::smpi::ActorExt* ext = smpi_process(); /* Now using the segment index of this process */