/* ---------------------------------------------------------------------------- * GTSAM Copyright 2010, Georgia Tech Research Corporation, * Atlanta, Georgia 30332-0415 * All Rights Reserved * Authors: Frank Dellaert, et al. (see THANKS for the full author list) * See LICENSE for the license information * -------------------------------------------------------------------------- */ /** * @file timeVirtual.cpp * @brief Time the overhead of using virtual destructors and methods * @author Richard Roberts * @date Dec 3, 2010 */ #include #include #include using namespace std; using namespace gtsam; struct Plain { size_t data; Plain(size_t _data) : data(_data) {} void setData(size_t data) { this->data = data; } }; struct Virtual { size_t data; Virtual(size_t _data) : data(_data) {} virtual void setData(size_t data) { this->data = data; } virtual ~Virtual() {} }; struct VirtualCounted { size_t data; size_t refCount; VirtualCounted(size_t _data) : data(_data) {} virtual void setData(size_t data) { this->data = data; } virtual ~VirtualCounted() {} }; int main(int argc, char *argv[]) { size_t trials = 10000000; gttic_(heap_plain_alloc_dealloc); for(size_t i=0; i obj(new Plain(i)); } gttoc_(shared_plain_alloc_dealloc); gttic_(shared_virtual_alloc_dealloc); for(size_t i=0; i obj(new Virtual(i)); } gttoc_(shared_virtual_alloc_dealloc); gttic_(heap_plain_alloc_dealloc_call); for(size_t i=0; isetData(i+1); delete obj; } gttoc_(heap_plain_alloc_dealloc_call); gttic_(heap_virtual_alloc_dealloc_call); for(size_t i=0; isetData(i+1); delete obj; } gttoc_(heap_virtual_alloc_dealloc_call); gttic_(stack_plain_alloc_dealloc_call); for(size_t i=0; i obj(new Plain(i)); obj->setData(i+1); } gttoc_(shared_plain_alloc_dealloc_call); gttic_(shared_virtual_alloc_dealloc_call); for(size_t i=0; i obj(new Virtual(i)); obj->setData(i+1); } gttoc_(shared_virtual_alloc_dealloc_call); gttic_(intrusive_virtual_alloc_dealloc_call); for(size_t i=0; i obj(new VirtualCounted(i)); obj->setData(i+1); } gttoc_(intrusive_virtual_alloc_dealloc_call); tictoc_print_(); return 0; }