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); }

这样延迟初化到可有效地处理它的运行时.
应该可解决编译速度慢,编译时内存消耗大可执行文件大小大的问题.语言无法解决该问题.

posted @   zjh6  阅读(16)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示