调用堆栈是一系列程序计数器 (program counter, PC) 地址,表示来自程序内的指令。第一个 PC 称为 叶 PC,它位于堆栈的底部,是要执行的下一条指令的地址。 下一个 PC 是调用包含叶 PC 的函数的地址;再下一个 PC 是调用该函数的地址,依此类推,直至到达堆栈的顶部。每个这样的地址称为返回地址。记录调用堆栈的过程涉及从程序堆栈获取返回地址,这称为展开堆栈。 有关展开失败的信息,请参见不完全的堆栈展开。
调用堆栈中的叶 PC 用于将独占度量从性能数据分配到该 PC 所在的函数。堆栈中的每个 PC(包括叶 PC)用于将非独占度量分配到它所在的函数。
大多数时候,已记录调用堆栈中的 PC 自然地对应于出现在程序源代码中的函数,而且性能分析器的已报告度量直接对应于这些函数。但是,有时程序的实际执行并不与程序执行方式的简单直观模型相对应,而且性能分析器的报告度量可能会引起混淆。有关此类情况的更多信息,请参见将地址映射到程序结构。