Do Boost.Intrusive containers still have performance advantages over non-intrusive standard (std::) ones in the modern C++ (with move semantic, emplace_back, etc)?
Do Intrusive containers still have performance advantages over non-intrusive ones in modern C++?
758 Views Asked by Gluttton At
1
There are 1 best solutions below
Related Questions in C++
- C++ using std::vector across boundaries
- Linked list without struct
- Connecting Signal QML to C++ (Qt5)
- how to get the reference of struct soap inherited in C++ Proxy/Service class
- Why we can't assign value to pointer
- Conversion of objects in c++
- shared_ptr: "is not a type" error
- C++ template using pointer and non pointer arguments in a QVector
- C++ SFML 2.2 vectors
- Lifetime of temporary objects
- I want to be able to use 4 different variables in a select statement in c ++
- segmentation fault: 11, extracting data in vector
- How to catch delay-import dll errors (missing dll or symbol) in MinGW(-w64)?
- How can I print all the values in this linked list inside a hash table?
- Configured TTL for A record(s) backing CNAME records
Related Questions in C++11
- C++ using std::vector across boundaries
- Using QPointer and QObject::connect with C++11
- Using std::vector<> and std::shared_ptr<> should cause error
- invoking function for each variadic template arguments and passing the result as constructor arguments
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
- Whether to use T const& or T&&
- C++ IRC Bot Buffer Error
- Downcast from a container of Base* to Derived* without explicit conversion
- Assigning values in a vector in non-sequential order
- Can I use C++11 list-initializer syntax for vectors with variables?
- is it fine to use auto keyword in function parameter?
- Variadic template method and std::function - compilation error
- Clustering on Graph (using Boost Graph Library)
- libc++ difference between vector::insert overloads
- Cannot convert argument1 to const char
Related Questions in MOVE-SEMANTICS
- Object's container field is empty after move and erase
- Return values for active objects
- std::push_heap and std::pop_heap with MoveConstructible objects
- Releasing memory with std::move()?
- Does erasing a shared_ptr from a set deletes the managed object
- Confusion about copy constructor vs. move constructor being called when std::vector is resized
- C++11 compilation errors with std::move and std::make_move_iterator
- Why does std::is_nothrow_move_assignable depend on the presence of a destructor?
- What happens to an object instance after applying std::move
- C++11 tuple with copy elision or move semantic
- Function overloading for rvalue
- How to take an rvalue reference parameter and pass it on elsewhere?
- C++: For which objects, being "moved" implies more than "staying valid"?
- std::move return and input reference argument
- Using std::move with vectors
Related Questions in INTRUSIVE-CONTAINERS
- Trying to learn boost::intrusive Q2
- Trying to learn boost::intrusive Q3 - When storing pointers in ICs, should I use smart_pointer?
- Assigning a new value to a iterator of a intrusive container
- how to convert slist 'node_ptr' to my own node type
- Boost Intrusive Swap
- How to clone a hook with Boost Intrusive?
- Using BOOST_FOREACH with a constant intrusive list
- member hook implementation for splay_multiset in Boost::Intrusive
- C++ How to avoid friend template functions with home-made intrusive lists
- How to implement intrusive data structures in C++11?
- C++ CRTP and accessing derived's nested typedefs from base
- Does a class need to be a standard layout type to be sure of the memory offsets of its members?
- Design pattern to allow the efficient deletion of an element from multiple containers in C++
- Windows singly linked list (_SINGLE_LIST_ENTRY)
- How to hide Boost intrusive list hook ?
Related Questions in BOOST-INTRUSIVE
- Boost Intrusive Swap
- Boost Intrusive unordered_set static member function returns wrong size type
- how to detach elements from a boost::intrusive set container
- Ideas on how to track boost::intrusive_ptr's
- How to create boost::intrusive::list from an already existing legacy list?
- TSAN thread race error detected with Boost intrusive_ptr use
- C++ Boost Intrusive List - Example
- What was the ISO C++ committee rationale to not accept intrusive pointers and containers to any current C++ standards?
- How to erase while iterating boost::intrusive::list
- How to hide Boost intrusive list hook ?
- boost intrusive get next directly from node
- thread safe boost intrusive list is slow
- Boost Intrusive Hashtable
- Confusion about one element in more boost::intrusive containers
- How to free memory when using boost::intrusive_ptr in C++?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Yes, there are numerous advantages of intrusive containers that still remain even when move semantics are used with STL containers. In particular, memory locality is still likely going to be better, which can yield great performance gains in certain scenarios. Also, iterators can still benefit greatly, and avoiding any overhead from exceptions can speed up insertion/deletion operations.
Consider Table 19.1 from the Intrusive and non-intrusive containers section of the Boost reference. Most of these advantages likely remain, such as:
The Boost documentation has detailed performance metrics which show the relative performance of a wide variety of operations in different scenarios. If you consider which of these is not affected primarily by allocation, there is still considerable potential.
Of course, ultimately the question of performance and optimality is going to depend primarily on your particular application, so it is inadvisable to make generalised statements about the "best" or "fastest" approach. There is no substitute for profiling your particular code and assessing the tradeoffs involved with the additional complexity.