132 size_t required_bytes = size *
sizeof(
Fr);
140 size_t file_size = required_bytes;
141 static std::atomic<size_t> file_counter{ 0 };
142 size_t id = file_counter.fetch_add(1);
144 std::filesystem::path temp_dir;
146 temp_dir = std::filesystem::temp_directory_path();
147 }
catch (
const std::exception&) {
148 temp_dir = std::filesystem::current_path();
153 int fd = open(filename.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644);
158 if (ftruncate(fd,
static_cast<off_t
>(file_size)) != 0) {
160 std::filesystem::remove(filename);
164 void* addr = mmap(
nullptr, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
165 if (addr == MAP_FAILED) {
167 std::filesystem::remove(filename);
172 file_backed_data->file_size = file_size;
173 file_backed_data->filename = filename;
174 file_backed_data->fd = fd;
175 file_backed_data->raw_data_ptr =
static_cast<Fr*
>(addr);
177 memory.raw_data =
static_cast<Fr*
>(addr);