没有隐藏的控制流,也没有隐藏的内存分配
了解定义 Zig 的设计承诺。
没有隐藏的控制流,也没有隐藏的内存分配 是 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 反馈 — 无需本地设置。
此课程中的所有课时
- Zig 要解决什么问题?
- Zig 与 C、Rust 和 Go 的比较
- 没有隐藏的控制流,也没有隐藏的内存分配
- 使用 Zig 可以构建什么