* \ | |
* ----
*/
-#include <unordered_map>
+#include <map>
#include "private.h"
#include "private.hpp"
shared_data_key_type* data;
} shared_metadata_t;
-std::unordered_map<void*, shared_metadata_t> allocs_metadata;
+std::map<void*, shared_metadata_t> allocs_metadata;
xbt_dict_t calls = nullptr; /* Allocated on first use */
#ifndef WIN32
static int smpi_shared_malloc_bogusfile = -1;
void* res = mmap(pos, smpi_shared_malloc_blocksize, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED | MAP_POPULATE,
smpi_shared_malloc_bogusfile, 0);
xbt_assert(res == pos, "Could not map folded virtual memory (%s). Do you perhaps need to increase the "
- "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ?",
+ "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ?"
"You can also try using the sysctl vm.max_map_count",
strerror(errno));
}
void* res = mmap(pos, size % smpi_shared_malloc_blocksize, PROT_READ | PROT_WRITE,
MAP_FIXED | MAP_SHARED | MAP_POPULATE, smpi_shared_malloc_bogusfile, 0);
xbt_assert(res == pos, "Could not map folded virtual memory (%s). Do you perhaps need to increase the "
- "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ?",
+ "size of the mapped file using --cfg=smpi/shared-malloc-blocksize=newvalue (default 1048576) ?"
"You can also try using the sysctl vm.max_map_count",
strerror(errno));
}
return mem;
}
-int smpi_is_shared(void*ptr){
+int smpi_is_shared(void* ptr){
if (allocs_metadata.empty())
return 0;
if ( smpi_cfg_shared_malloc == shmalloc_local || smpi_cfg_shared_malloc == shmalloc_global) {
- if (allocs_metadata.count(ptr) != 0)
- return 1;
- for(auto it : allocs_metadata){
- if (ptr >= it.first && ptr < (char*)it.first + it.second.size)
- return 1;
- }
+ auto low = allocs_metadata.lower_bound(ptr);
+ if (low->first==ptr)
+ return 1;
+ if (low == allocs_metadata.begin())
return 0;
+ low --;
+ if (ptr < (char*)low->first + low->second.size)
+ return 1;
+ return 0;
} else {
return 0;
}