Optimize `stacktrace` by avoid large allocation
Nobody has claimed this yet.
- Dominant language
- C++
- Stars
- 11.1k
- Forks
- 1.7k
- Avg merge
- 4d 15h
- Merged PRs (30d)
- 22
Description
@achabense observed that pre-initializing internal vector in stacktrace to the maximum possible depth has noticeable performance impact:
https://github.com/microsoft/STL/blob/2261f7edb760eb3fe0726187c818b796dc7ea798/stl/inc/stacktrace#L142
https://github.com/microsoft/STL/blob/2261f7edb760eb3fe0726187c818b796dc7ea798/stl/inc/stacktrace#L303
The CaptureStackBackTrace API does not have a way for determining the needed amount in advance.
Currently we don't maintain own array management in stacktrace and using vector to avoid dealing in one more place with:
- copying/moving/assignments
- allocators
- ASan
What could we do:
- @AlexGuteniev suggested that we can create a secret constructor for
vectorwithout initialization. - @StephanTLavavej suggested we can use smaller allocation on stack, and then try maximum if smaller overflow, otherwise copy data from the stack and not allocate large amount. Smaller could be 32 entries, which is
32*sizeof(void*)bytes, - @strega-nil-ms suggested we could start with smaller allocations and grow in a geometric progression
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at stl/inc/stacktrace around the referenced lines and review how CaptureStackBackTrace fills the vector. Compare the proposed smaller-stack, geometric-growth, or uninitialized-vector approaches; done means avoiding maximum-size initialization while preserving copying, moving, assignment, allocator, and ASan behavior.
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
- Needs clarification
- Newbie friendliness
- 25/100