zalloc: Use zig allocators in your c code

Lobsters Hottest Tools

Summary

zalloc replaces malloc, calloc, realloc, and free in C modules with Zig allocators, enabling Zig-style memory management in C code.

<p><a href="https://lobste.rs/s/lurkvp/zalloc_use_zig_allocators_your_c_code">Comments</a></p>
Original Article
View Cached Full Text

Cached at: 06/08/26, 11:17 AM

D-Berg/zalloc

Source: https://github.com/D-Berg/zalloc

Zalloc

Replace malloc, calloc, realloc and free in a c module with a zig allocator.

Usage

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

const zalloc = @import("zalloc");

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

    //...

    // add it as a dependency
    const zalloc_dep = b.dependency("zalloc", .{
        .optimize = optimize,
        .target = target,
    });

    // Example c lib, shoutout to md4c
    const md4c_mod = b.addModule("md4c", .{
        .target = target,
        .optimize = optimize,
        .link_libc = true,
    });

    // this overwrites malloc, calloc, realloc and free in 
    // all c source files in the c module and will only affect that module.
    zalloc.infect(md4c_mod);

    // import the and link zalloc to your exe
    exe_mod.addImport("zalloc", zalloc_dep.module("zalloc"));
    exe_mod.linkLibrary(zalloc_dep.artifact("zalloc"));
}


const zalloc = @import("zalloc");

pub fn main(init: std.Io.Init) !void {
    // Specify which allocator the c library will use
    // DO this before calling any of the c functions.
    // Forgetting this will lead to allocations returning null.
    zalloc.allocator = init.gpa;
    zalloc.io = init.io;

    // ...

    // now md4c will use zigs debug allocator.
    const rc = md4c.md_html(
        markdown.ptr,
        @intCast(markdown.len),
        processHtml,
        null,
        md4c.MD_FLAG_COLLAPSEWHITESPACE,
        0,
    );
    if (rc != 0) return error.FailedToParseMarkdown;
}

Similar Articles

Zig Structs of Arrays (2024)

Hacker News Top

Explains how Zig's comptime and type reflection enable creating struct-of-arrays (SoA) data structures like MultiArrayList, which improve cache performance in high-performance applications.

Zig ELF Linker Improvements Devlog

Hacker News Top

The new Zig ELF linker now supports fast incremental compilation with external libraries and C sources, enabling rebuilds in milliseconds on x86_64 Linux.

Writing a C Compiler, in Zig

Hacker News Top

A developer documents their experience building a C compiler named paella in Zig, following Nora Sandler’s tutorial series.

Zig by Example

Hacker News Top

A hands-on introduction to the Zig programming language via annotated examples, covering basic to advanced topics. Inspired by Go by Example.

Build System Reworked

Lobsters Hottest

The Zig build system has been reworked to separate the configurer and maker processes, enabling caching, release-mode compilation, and up to 90% faster 'zig build' commands. This change improves performance and allows the build system to grow features without slowing down.