zalloc: 在你的 C 代码中使用 Zig 分配器

Lobsters Hottest 工具

摘要

zalloc 将 C 模块中的 malloc、calloc、realloc 和 free 替换为 Zig 分配器,从而在 C 代码中实现 Zig 风格的内存管理。

<p><a href="https://lobste.rs/s/lurkvp/zalloc_use_zig_allocators_your_c_code">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/08 11:17

D-Berg/zalloc

来源:https://github.com/D-Berg/zalloc

Zalloc

在一个C模块中用Zig分配器替换malloc、calloc、realloc和free。

使用

zig fetch --save git+https://github.com/D-Berg/zalloc.git
// build.zig

const zalloc = @import("zalloc");

pub fn build(b: *std.Build) !void {

    //...

    // 将其添加为依赖
    const zalloc_dep = b.dependency("zalloc", .{
        .optimize = optimize,
        .target = target,
    });

    // 示例C库(在此感谢md4c)
    const md4c_mod = b.addModule("md4c", .{
        .target = target,
        .optimize = optimize,
        .link_libc = true,
    });

    // 这将覆盖C模块中所有C源文件的malloc、calloc、realloc和free,
    // 且只会影响该模块。
    zalloc.infect(md4c_mod);

    // 将zalloc导入并链接到你的可执行文件
    exe_mod.addImport("zalloc", zalloc_dep.module("zalloc"));
    exe_mod.linkLibrary(zalloc_dep.artifact("zalloc"));
}
// main.zig

const zalloc = @import("zalloc");

pub fn main(init: std.Io.Init) !void {
    // 指定C库将使用的分配器
    // 在调用任何C函数之前执行此操作
    // 如果忘记,分配将返回null。
    zalloc.allocator = init.gpa;
    zalloc.io = init.io;

    // ...

    // 现在md4c将使用Zig的调试分配器。
    const rc = md4c.md_html(
        markdown.ptr,
        @intCast(markdown.len),
        processHtml,
        null,
        md4c.MD_FLAG_COLLAPSEWHITESPACE,
        0,
    );
    if (rc != 0) return error.FailedToParseMarkdown;
}

相似文章

Zig 的数组结构体 (2024)

Hacker News Top

说明 Zig 的 comptime 和类型反射如何支持创建像 MultiArrayList 这样的数组结构体 (SoA) 数据结构,从而提升高性能应用中的缓存性能。

Zig ELF 链接器改进开发日志

Hacker News Top

新的 Zig ELF 链接器现在支持外部库和 C 源码的快速增量编译,在 x86_64 Linux 上能够实现毫秒级重建。

用 Zig 写一个 C 编译器

Hacker News Top

一位开发者记录了用 Zig 语言、按照 Nora Sandler 的教程系列构建名为 paella 的 C 编译器的全过程。

Zig 示例教程

Hacker News Top

通过带注释的示例,对 Zig 编程语言进行实践性介绍,涵盖从基础到高级的主题。灵感来源于 Go by Example。

构建系统重构

Lobsters Hottest

Zig 构建系统已经重构,将配置器和制造器进程分离,支持缓存、发布模式编译,并且'zig build'命令速度提升高达90%。这一变化提高了性能,并允许构建系统在不减速的情况下增加功能。