Zig Academy · 课时

没有隐藏的控制流,也没有隐藏的内存分配

了解定义 Zig 的设计承诺。

第 3 / 4 课13 个步骤

没有隐藏的控制流,也没有隐藏的内存分配 是 CoddyKit 上的免费 Zig Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Zig Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Zig Academy 课程共包含 4 节课。

两个著名的承诺

Zig 以两条规则闻名:没有隐藏的控制流,也没有隐藏的内存分配。两者结合后,代码更容易阅读,也更值得信赖。

控制流是什么意思

控制流就是代码运行的顺序。隐藏的控制流是指页面上看不到的调用发生了,让您在之后感到意外。

没有令人意外的函数调用

Zig 没有运算符重载,也没有隐藏的析构函数。如果某个函数运行了,您就能在源代码中直接看到它的调用。

失败是可见的

不会有异常跨越整个程序突然出现。要忽略或传递失败,您需要写出try或 catch,因此错误路径是明确的。

const data = try readFile(path);

内存分配是什么意思

内存分配是在程序运行时为数据预留内存。隐藏的内存分配是指语言在您不知情的情况下,默默地通过一个简单调用替您完成分配。

传入分配器

在 Zig 中,需要堆内存的代码会将分配器作为参数接收。如果一个函数可以分配内存,它的签名就会清楚地说明这一点。

fn loadConfig(allocator: std.mem.Allocator) !Config {
    // ...
}

由您选择策略

由于分配器由您传入,您可以决定内存的来源:进行调试检查的分配器、内存 arena,或固定大小的栈缓冲区。

这对您有什么帮助

可见的内存分配让内存开销一目了然,这对性能调优非常宝贵;对于完全没有堆的嵌入式设备也是如此。

阅读胜过猜测

这些规则意味着,您可以通过阅读代码来理解它,而不是记住隐藏的机制。您看到的,就是实际运行的内容。

defer 让清理更清晰

清理操作同样是明确的。defer语句会安排代码在作用域结束时运行,因此释放内存的代码就位于分配代码旁边。

const buf = try allocator.alloc(u8, 64);
defer allocator.free(buf);

取舍:需要编写更多代码

诚实地说,代价是需要多写一点代码:您要在代码中逐层传递分配器。作为回报,您会获得完全的清晰度和控制力。

快速检查

如何判断一个 Zig 函数可能会分配内存?

回顾

没有隐藏的控制流,也没有隐藏的内存分配,这意味着失败和内存操作始终是可见的。阅读代码,您就能准确知道会发生什么。✨

免费开始

用 AI 导师学习 Zig — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「没有隐藏的控制流,也没有隐藏的内存分配」课时是免费的吗?

是的 — 「没有隐藏的控制流,也没有隐藏的内存分配」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Zig Academy 课程的其余内容,请升级到 CoddyKit PRO。 Zig Academy 课程共包含 4 节课。

「没有隐藏的控制流,也没有隐藏的内存分配」这节课中我会学到什么?

了解定义 Zig 的设计承诺。 你通过在浏览器中直接运行的动手代码来练习 Zig Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Zig Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Zig Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「没有隐藏的控制流,也没有隐藏的内存分配」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Zig Academy 课中编写并运行代码吗?

能。每节 Zig Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Zig 要解决什么问题?
  2. Zig 与 C、Rust 和 Go 的比较
  3. 没有隐藏的控制流,也没有隐藏的内存分配
  4. 使用 Zig 可以构建什么
← 返回 Zig Academy