123 size_t required_bytes = size *
sizeof(
Fr);
131 size_t file_size = required_bytes;
132 static std::atomic<size_t> file_counter{ 0 };
133 size_t id = file_counter.fetch_add(1);
135 std::filesystem::path temp_dir;
137 temp_dir = std::filesystem::temp_directory_path();
138 }
catch (
const std::exception&) {
139 temp_dir = std::filesystem::current_path();
144 int fd = open(filename.c_str(), O_CREAT | O_RDWR | O_TRUNC, 0644);
149 if (ftruncate(fd,
static_cast<off_t
>(file_size)) != 0) {
151 std::filesystem::remove(filename);
155 void* addr = mmap(
nullptr, file_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
156 if (addr == MAP_FAILED) {
158 std::filesystem::remove(filename);
163 file_backed_data->file_size = file_size;
164 file_backed_data->filename = filename;
165 file_backed_data->fd = fd;
166 file_backed_data->raw_data_ptr =
static_cast<Fr*
>(addr);
168 memory.raw_data =
static_cast<Fr*
>(addr);