124 size_t required_bytes = size *
sizeof(
Fr);
132 size_t file_size = required_bytes;
133 static std::atomic<size_t> file_counter{ 0 };
134 size_t id = file_counter.fetch_add(1);
136 std::filesystem::path temp_dir;
138 temp_dir = std::filesystem::temp_directory_path();
139 }
catch (
const std::exception&) {
140 temp_dir = std::filesystem::current_path();
145 int fd = open(filename.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644);
150 if (ftruncate(fd,
static_cast<off_t
>(file_size)) != 0) {
152 std::filesystem::remove(filename);
156 void* addr = mmap(
nullptr, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
157 if (addr == MAP_FAILED) {
159 std::filesystem::remove(filename);
164 file_backed_data->file_size = file_size;
165 file_backed_data->filename = filename;
166 file_backed_data->fd = fd;
167 file_backed_data->raw_data_ptr =
static_cast<Fr*
>(addr);
169 memory.raw_data =
static_cast<Fr*
>(addr);