Make folly::small_vector friendly to compiler optimizations
Summary: This includes several enhancements to folly::small_vector: Eliminate overhead accessing vector elements by making heap_ points to element 0 of the vector. To get start address only dispatch is required as shown below: value_type* data () { // Dispatch between heap_ or internalStorage, return isExtern() ? heap_ : &internalStorage_; } Reorganize the implementation by recording if capacity is stored internally or on the heap in "size". As a result the maximum vector size is half smaller. This is the only visible behavior change of this PR. Assuming size is 64 bits then - bit63 determines if vector elements are stored in internalStorage_ or externally in the heap - bit62 determines if vector capacity is stored internally or on the heap - bit61..bit0 contain the size of the vector. Reduce the overhead of updating size buy adding incrementSize functions. Tune emplace_back function and vector initialization. Reviewed By: yfeldblum Differential Revision: D24413105 fbshipit-source-id: b447704832af9c734be51aa6d23b8cb4be69a8bf
Showing
Please register or sign in to comment