microsoft / microsoft/STL

Reconsider `vector<bool>` underlying type

Open
#5,348 8 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

performance vNext
Dominant language
C++
Stars
11.1k
Forks
1.7k
Avg merge
4d 15h
Merged PRs (30d)
22

Description

https://github.com/microsoft/STL/blob/09e0dbbf150714d2a01c8ab0b9b8df02884bb0cc/stl/inc/vector#L2261

For x64 applications, 64-bit integer would make operations on large containers faster, whereas impact on the smaller ones is negligible (just slightly longer instructions encoding, with the same uops typically).

Larger allocation should not be a problem, since vector<bool> allocates dynamically, and the typical allocation granularity is 16.

As perf-sensitive apps are supposed to compile to 64-bits anyway, can change the typedef for all modes, not just _WIN64, if having different types for different modes turns out to be complicated.

vNext note: Resolving this issue will require breaking binary compatibility. We won't be able to accept pull requests for this issue until the vNext branch is available. See #169 for more information.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at stl/inc/vector around line 2261, where the vector underlying type is defined. Review the x64 and non-x64 implications, then benchmark large and small containers before proposing a change. Done means an approach is validated for vNext while accounting for the stated binary-compatibility break.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp
Domain
performance
Issue type
Refactor
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.