123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- //
- // collector_test.cpp
- //
- // Copyright (c) 2003 Peter Dimov
- //
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- #include <boost/shared_ptr.hpp>
- #include <vector>
- #include <iostream>
- #include <cstdlib>
- #include <ctime>
- // sp_collector.cpp exported functions
- std::size_t find_unreachable_objects(bool report);
- void free_unreachable_objects();
- struct X
- {
- void* fill[32];
- boost::shared_ptr<X> p;
- };
- void report()
- {
- std::cout << "Calling find_unreachable_objects:\n";
- std::clock_t t = std::clock();
- std::size_t n = find_unreachable_objects(false);
- t = std::clock() - t;
- std::cout << n << " unreachable objects.\n";
- std::cout << " " << static_cast<double>(t) / CLOCKS_PER_SEC << " seconds.\n";
- }
- void free()
- {
- std::cout << "Calling free_unreachable_objects:\n";
- std::clock_t t = std::clock();
- free_unreachable_objects();
- t = std::clock() - t;
- std::cout << " " << static_cast<double>(t) / CLOCKS_PER_SEC << " seconds.\n";
- }
- int main()
- {
- std::vector< boost::shared_ptr<X> > v1, v2;
- int const n = 256 * 1024;
- std::cout << "Filling v1 and v2\n";
- for(int i = 0; i < n; ++i)
- {
- v1.push_back(boost::shared_ptr<X>(new X));
- v2.push_back(boost::shared_ptr<X>(new X));
- }
- report();
- std::cout << "Creating the cycles\n";
- for(int i = 0; i < n - 1; ++i)
- {
- v2[i]->p = v2[i+1];
- }
- v2[n-1]->p = v2[0];
- report();
- std::cout << "Resizing v2 to size of 1\n";
- v2.resize(1);
- report();
- std::cout << "Clearing v2\n";
- v2.clear();
- report();
- std::cout << "Clearing v1\n";
- v1.clear();
- report();
- free();
- report();
- }
|