在尝试构建自己的非 GNU 跨平台 C++ 环境时,我面临一个事实,即我并不真正了解堆栈展开的基础知识。我搭建的环境如下:
libc++
← libc++abi
← libunwind
(或其他一些展开器)。
我发现它libc++abi
已经包含某种 libunwind,但不在 Linux 上使用它。根据我理解的评论,它是特殊的 libunwind: LLVM Stack Unwinder,仅支持 Darwin 和 ARM,但不支持 x86_64 - 这令人困惑。CPU架构如何影响堆栈展开过程?
我还知道以下堆栈展开器:
- glibc 内置。
- libc++abi LLVM libunwind。
- GNU libunwind(来自稀树草原)。
问题:
- 平台或 CPU 架构如何影响堆栈展开过程?
- 为什么要有许多堆放卷机——而不仅仅是一个?
- 确实存在什么样的开卷机,它们之间有什么区别?
对答案的期望:
我希望得到涵盖整个主题的答案,而不仅仅是每个问题的不同点。