d的自动无垃集代码.

原文
D@nogc注解非常重要,但很少宣传.
@nogc主函数编译时保证程序永远不会分配垃集内存.
std.experimental.allocator这里分配.
这里的分配器可满足认为垃集不合适的,其他内存分配需求.通过I分配器接口,可运行时根据需要在垃集自定义分配策略间切换.
automem可简化分配.
scope(exit)来退出.零开销.示例:

struct Point {
    int x;
    int y;
}
{

    auto u1 = Unique!(Point, Mallocator)(2, 3);
//要传递参数,来初化.但,为单件
    assert(*u1 == Point(2, 3));
    assert(u1.y == 3); // 转发至容器类型
    // auto u2 = u1; // 不编译,只能移动
    typeof(u1) u2;
    move(u1, u2);
    assert(cast(bool)u1 == false); // u1为空
}// 释放内存

D中不必总是原子递增/递减.

{
    auto s1 = RefCounted!(Point, Mallocator)(4, 5);
    assert(*s1 == Point(4, 5));
    assert(s1.x == 4);
    {
        auto s2 = s1; // 可复制,非原子引用计数
    } // 引用归1
} //引用归0,释放内存

@nogc分配器,用automem的代码,自动为nogc,由RAII管理内存.编译时保证无垃集.
可如C++/rust一样,自动,而不是手动编写@nogc代码.

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