Отличается ли "вершина" стека от начала и конца?
Я использую библиотеку C libYAML для обработки файлов конфигурации YAML, и меня немного смущает этот элемент структуры в его коде:
/** The stack of mapping pairs (key, value). */
struct {
/** The beginning of the stack. */
yaml_node_pair_t *start;
/** The end of the stack. */
yaml_node_pair_t *end;
/** The top of the stack. */
yaml_node_pair_t *top;
} pairs;
Он использует три указателя, start
, end
, а также top
, И то и другое start
а также end
Кажется очевидным, они являются началом и концом области данных, но что top
?
(Для справки этот код появляется в строке 741 здесь.)
1 ответ
Решение
Начало и конец относятся к максимальным границам стека. Верхняя часть - это динамический указатель, ссылающийся на текущую позицию, который изменяется по мере вызова вложенных уровней функций.