Во многих программах, написанных на Tcl и на других языках, использование памяти в прошлом является довольно хорошим показателем использования памяти в будущем. Таким образом, как общая эвристика, реализация Tcl не пытается вернуть память в ОС (она всегда может выгрузить ее, если захочет; ОС всегда отвечает). Действительно, каждый поток на самом деле имеет свой собственный пул памяти (что позволяет обрабатывать память в значительной степени без блокировок), но это не имеет большого значения здесь, где есть только один основной поток (и несколько рабочих за кулисами, которые вы обычно можете игнорировать ). Кроме того, пулы памяти будут иметь тенденцию перераспределяться, потому что так работать намного быстрее.
Независимо от того, что вы измеряете, если это вообще инструмент, внешний по отношению к Tcl, он не обеспечит особенно хорошее отслеживание реального использования памяти из-за способа работы пула. Внутренние инструменты Tcl для этого (команда memory
) предоставляют гораздо более точную информацию, но не доступны по умолчанию: они используются во время компиляции при сборке библиотеки Tcl и обычно отключаются, поскольку имеют * 1004. * много накладных расходов. Кроме того, в Windows некоторые их функции работают вообще, только если вы создаете консольное приложение (следствие того, как они реализованы).