在 Racket 中指定内存限制
Specify memory limit in Racket
在 DrRacket
中,我可以使用 GUI 设置内存限制。但是,我发现编辑器不太好,想使用我选择的其他编辑器。但是我该如何指定内存限制呢?
我能想到两种可能性,但找不到关于这两种可能性的任何信息:
- 在代码的开头调用一些函数来设置内存限制
- 调用
racket
时(不是DrRacket GUI工具,而是命令行上的REPL)给它一些参数来指定限制
在代码的开头,您可以为模块设置一个内存限制。 (docs)
#lang racket/base
(define MAX-BYTES 1000)
(custodian-limit-memory (current-custodian) MAX-BYTES)
....
我不知道直接的命令行解决方案,但您可以在 racketrc 文件中调用 custodian-limit-memory
来设置 REPL 的限制。
另见 racket/sandbox,尤其是 call-with-limits
。
参见custodians。
例如:
#lang racket
;; Set limit
(custodian-limit-memory
(current-custodian) (* 2 1024 1024))
(define x (make-bytes (* 4 1024 1024)))
此代码的结果是 'out of memory'。
在 DrRacket
中,我可以使用 GUI 设置内存限制。但是,我发现编辑器不太好,想使用我选择的其他编辑器。但是我该如何指定内存限制呢?
我能想到两种可能性,但找不到关于这两种可能性的任何信息:
- 在代码的开头调用一些函数来设置内存限制
- 调用
racket
时(不是DrRacket GUI工具,而是命令行上的REPL)给它一些参数来指定限制
在代码的开头,您可以为模块设置一个内存限制。 (docs)
#lang racket/base
(define MAX-BYTES 1000)
(custodian-limit-memory (current-custodian) MAX-BYTES)
....
我不知道直接的命令行解决方案,但您可以在 racketrc 文件中调用 custodian-limit-memory
来设置 REPL 的限制。
另见 racket/sandbox,尤其是 call-with-limits
。
参见custodians。
例如:
#lang racket
;; Set limit
(custodian-limit-memory
(current-custodian) (* 2 1024 1024))
(define x (make-bytes (* 4 1024 1024)))
此代码的结果是 'out of memory'。