d低内存用光内存
原文
如下代码,使dmd在使用-lowmem选项时,抛OutOfMemoryError.
//--main.d--
struct Array(T)
{
T[] _payload;
this(int b)
{
import std;
_payload.length = b;
}
}
struct A
{
ushort[131070] a;
}
auto data = Array!A(255);
问题:
1.'import std'导入所有的标准库.这是非常不切实际的,并且不应添加按包导入.它会使编译非常慢,且消耗大量内存.
建议:只导入需要的模块.
2."data"声明有个必须在编译时的初化.此CTFE不能有效存储式:按256*131070个式AST节点存储数组.这消耗大量内存,且速度非常慢.然后,它必须生成(256*131,070)个静初化器.
建议:替换为运行时初化的指针:
Array!A(255)* pdata;
static this() { pdata = new Array!(255); }
这样延迟初化到可有效地处理它的运行时.
应该可解决编译速度慢,编译时内存消耗大和可执行文件大小大的问题.语言无法解决该问题.
浙公网安备 33010602011771号