Во-первых, не слишком доверяйте менеджеру задач. Это не очень точно.
Другое дело, что у компилятора есть стратегия выделения, которая вам не полностью известна.
Известно, что переменные в стековой памяти освобождаются после завершения функции.
Что «известно», так это то, что вам не следует создавать ссылку на локальную переменную и сохранять / возвращать ее с вероятностью того, что она будет использована вне области.
Если вы зациклились на этой функции или создали другую функцию, которая потребляет примерно столько же стека (или меньше), и вы вызываете ее сразу после этого, вы заметите, что объем памяти не увеличивается.
Это потому, что время выполнения компилятора не будет автоматически изменять размер стека. Он просто сохраняет его в следующий раз (это разница между стеком размер и емкость ). Здесь нет "утечки памяти". Вы даже можете настроить исполняемый файл (на этапе компоновки и в Windows с помощью таких инструментов, как EDITBIN
) для предварительного выделения всего стека при запуске, чтобы избежать изменения размера и перемещения памяти.