You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swi-Prolog中如何查看目标内存占用?详解statistics/2正确用法

在SWI-Prolog中用statistics/2查看目标的内存占用

嘿,这个问题我刚好有实践经验!和time/1直接包裹目标不同,statistics/2需要你对比目标执行前后的内存状态,才能算出目标实际消耗的内存。下面是具体的操作方法:

核心思路

statistics/2可以查询SWI-Prolog运行时的各种统计指标,其中和内存相关的关键参数有这几个:

  • heapused: 当前已使用的堆内存(字节数),这是最常用的统计项,用来衡量目标执行消耗的内存
  • stackused: 当前已使用的栈内存(字节数)
  • total_memory: 进程占用的总内存(字节数)

具体步骤

你需要先记录初始内存值,执行目标后再记录结束值,最后计算两者的差值。这里以堆内存为例,给你一个完整的示例:

% 1. 记录初始堆内存使用量
statistics(heapused, InitialHeap),
% 2. 执行你要测试的目标
my_target_predicate(Arguments),
% 3. 记录目标执行后的堆内存使用量
statistics(heapused, FinalHeap),
% 4. 计算并打印消耗的内存
MemoryConsumed is FinalHeap - InitialHeap,
format('目标执行消耗的堆内存: ~d 字节~n', [MemoryConsumed]).

进阶技巧

如果你想一次性同时统计时间和内存,可以把time/1和内存统计结合起来:

statistics(heapused, InitialHeap),
time(my_target_predicate(Arguments)),
statistics(heapused, FinalHeap),
MemoryConsumed is FinalHeap - InitialHeap,
format('CPU时间如上,内存消耗: ~d 字节~n', [MemoryConsumed]).

注意事项

  • 如果你的目标会产生持久化的副作用(比如创建全局断言、修改动态数据库),建议在测试前做好环境清理,避免之前的运行残留影响内存统计结果。
  • 不同的Prolog实现对statistics/2的参数支持可能略有差异,但SWI-Prolog里上面提到的几个参数都是稳定可用的。

内容的提问来源于stack exchange,提问作者user27815

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:33:22