我正在研究一项旨在作为服务工作的研究编译器项目。其中一个要求是某些用户在处理其呼叫时可能具有有限的内存使用量(例如,“来自IP a.b.c.d 的呼叫可能使用最多30mb的堆内存”)。
我用C语言编写的原型实现只是直接使用malloc
的内存池(由于有效类型,实际上很难做到)。但是,手动内存管理。
有没有办法在Haskell中实现这一点,通过限制函数,monad或轻量级线程的堆使用? (我接受其他功能语言的建议,这些建议可能允许我这样做。)
答案 0 :(得分:10)
在最新版本的GHC中,可以使用GHC.Conc
中的<?php
$envelopeXML = new SimpleXMLElement('<?xml version="1.0"?><s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"></s:Envelope>');
Header('Content-type: text/xml');
echo $envelopeXML->asXML();
和setAllocationCounter
设置每线程分配计数器和限制。设置限制并且计数器达到0时,线程会收到异步异常。
计数器测量分配,而不是实时集的大小。例如,尽管它的实时设置永远不会变得很大,但这个代码达到了极限:
enableAllocationLimit
分配有点粗略作为一种衡量标准,但它仍然有助于发现一些失控的情况&#34;计算
Simon Marlow的This blog post会详细介绍。