Ticket #4374: ShmTest.cpp

File ShmTest.cpp, 1.9 KB (added by Matt Cupp <cuppmatt@…>, 12 years ago)

Code for test application that produces the bus error

Line 
1#include <iostream>
2
3#include <boost/interprocess/managed_shared_memory.hpp>
4#include <boost/interprocess/allocators/allocator.hpp>
5#include <boost/interprocess/containers/vector.hpp>
6
7namespace bip = boost::interprocess;
8
9typedef bip::managed_shared_memory::segment_manager segment_manager_t;
10typedef bip::allocator<long, segment_manager_t> long_allocator;
11typedef bip::vector<long, long_allocator> long_vector;
12
13int main(int argc, char ** argv) {
14 struct shm_remove {
15 shm_remove() { bip::shared_memory_object::remove("ShmTest"); }
16 ~shm_remove() { bip::shared_memory_object::remove("ShmTest"); }
17 } remover;
18
19 size_t szLength = 280000000;
20 size_t szRequired = szLength * sizeof(long);
21 size_t szRequested = (size_t) (szRequired * 1.05);
22 bip::managed_shared_memory segment(bip::create_only, "ShmTest", szRequested);
23
24 std::cout <<
25 "Length: " << szLength << "\n" <<
26 "sizeof(long): " << sizeof(long) << "\n" <<
27 "Required: " << szRequired << "\n" <<
28 "Requested: " << szRequested << "\n" <<
29 "Allocated: " << segment.get_size() << "\n" <<
30 "Overhead: " << segment.get_size() - segment.get_free_memory() << "\n" <<
31 "Free: " << segment.get_free_memory() << "\n\n";
32
33 long_allocator alloc(segment.get_segment_manager());
34 long_vector vector(alloc);
35
36 if (argc > 1) {
37 std::cout << "Reserving Length of " << szLength << "\n";
38 vector.reserve(szLength);
39 std::cout << "Vector Capacity: " << vector.capacity() << "\tFree: " << segment.get_free_memory() << "\n\n";
40 }
41
42 for (size_t i = 0; i < szLength; i++) {
43 if ((i % (szLength / 100)) == 0) {
44 std::cout << i << ": " <<"\tVector Capacity: " << vector.capacity() << "\tFree: " << segment.get_free_memory() << "\n";
45 }
46 vector.push_back(i);
47 }
48 std::cout << "end: " <<"\tVector Capacity: " << vector.capacity() << "\tFree: " << segment.get_free_memory() << "\n";
49
50 return 0;
51}