Reputation: 155
When I try to create a memory mapped file using boost interprocess managed_mapped_file of size > 4GB, a smaller file is created (e.g. if a 5GB specification results in a 1GB file).
#include <iostream>
#include <string>
#include <boost/interprocess/managed_mapped_file.hpp>
int main()
{
unsigned int sizeInMB = 4 * 1024 - 1;
boost::interprocess::managed_mapped_file file1(boost::interprocess::create_only, "MyMappedFile1", sizeInMB * 1024 * 1024);
std::cout << "Free memory File 1 = " << file1.get_segment_manager()->get_free_memory() << std::endl;
sizeInMB = 5 * 1024;
boost::interprocess::managed_mapped_file file2(boost::interprocess::create_only, "MyMappedFile2", sizeInMB * 1024 * 1024);
std::cout << "Free memory File 2 = " << file2.get_segment_manager()->get_free_memory() << std::endl;
}
The output here is -
Free memory File 1 = 4293918496
Free memory File 2 = 1073741600
How can I create a file larger than 4 GB?
Thanks.
Upvotes: 1
Views: 79
Reputation: 393694
The wrapping happens because you use int
, instead of size_t
:
#include <iostream>
#include <string>
#include <boost/interprocess/managed_mapped_file.hpp>
int main()
{
size_t sizeInMB = 4 * 1024 - 1;
boost::interprocess::managed_mapped_file file1(boost::interprocess::create_only, "MyMappedFile1", sizeInMB * 1024 * 1024);
std::cout << "Free memory File 1 = " << file1.get_segment_manager()->get_free_memory() << std::endl;
sizeInMB = 5 * 1024;
boost::interprocess::managed_mapped_file file2(boost::interprocess::create_only, "MyMappedFile2", sizeInMB * 1024 * 1024);
std::cout << "Free memory File 2 = " << file2.get_segment_manager()->get_free_memory() << std::endl;
}
Printing
Free memory File 1 = 4293918496
Free memory File 2 = 5368708896
Upvotes: 0