从零开始用汇编语言编写GUI程序

2025-09-16

本文讲述了作者如何通过编写一个简单的GUI程序来学习x86-64汇编语言。作者从一个简单的退出程序开始,逐步讲解了系统调用、栈操作、X11协议等知识,最终实现了在不到1KB的二进制文件中创建一个显示“Hello, world!”的窗口。文章深入浅出,适合有一定编程基础的读者学习。

阅读更多
开发

调试构建速度提升 100 倍的秘诀:SIMD 和专用硬件的奇迹

2025-02-18

作者在开发一个 C 语言编写的 Torrent 应用程序时,遇到了调试构建启动速度过慢的问题(20-30 秒)。这主要是因为程序启动时需要逐块验证下载文件的 SHA1 哈希值,而调试模式下的 Address Sanitizer 会显著降低 SHA1 计算速度。文章尝试了多种优化方法,包括使用 SIMD 指令和 CPU 的专用 SHA 加速硬件。最终,通过使用 Intel SHA 扩展指令集,将启动时间缩短到 866.9 毫秒,实现了 100 倍的性能提升。这篇文章详细介绍了各种优化方案的实现细节和性能对比,并探讨了编译器优化和磁盘 I/O 的影响。

阅读更多
开发

跨平台定时器API的缺失:一场操作系统API的探险

2025-02-06

本文探讨了跨平台C语言编程中定时器API的困境。作者发现,不同Unix系统(包括Linux、FreeBSD、NetBSD等)对定时器的处理方式差异巨大,POSIX提供的timer_create方法因其基于信号机制而存在诸多问题,例如与其他操作系统原语的互操作性差、信号掩码的影响等。文章深入分析了timerfd_create、kqueue、port_create以及io_uring等不同方案的优缺点,并最终指出,对于跨平台应用,在用户空间实现定时器,例如libuv的做法,是更有效率和可靠的方案,它使用最小堆数据结构管理定时器,并通过poll/epoll/kqueue等系统调用实现多路复用。

阅读更多
开发

Rust是否需要"defer"机制?

2024-11-06

本文探讨了在Rust中使用类似`defer`机制的必要性,尤其是在与C语言进行FFI(外部函数接口)交互时。作者通过一个分配和释放内存的示例,演示了直接使用`libc::free`释放Rust分配的内存会导致未定义行为。文章分析了`Vec`的内存管理细节,指出直接使用`free`释放`Vec`指针的风险。作者尝试了多种解决方案,包括使用`Box::from_raw`、自定义`OwningArrayC`结构体以及`scopeguard`库提供的`defer!`宏,但都遇到了各种问题,例如与借用检查器冲突。最终,作者提出Rust需要内置`defer`机制或改进借用检查器,以简化FFI编程并提高安全性。

阅读更多
未分类 defer

每日技巧 #2:更安全的Arena分配器

2024-11-04

本文介绍了一种更安全的Arena分配器,通过在分配的内存区域前后添加保护页来防止越界访问。Arena分配器将具有相同生命周期的多个分配分组到一个批次中,一次性分配和释放,从而简化代码并提高性能。然而,标准的Arena分配器容易出现越界写入错误,导致难以调试的问题。本文提出的解决方案是在Arena创建时,在实际分配的内存前后添加保护页,并将这些页面标记为不可读写,任何访问都会触发SIGSEGV信号,从而更容易诊断越界访问错误。文章还讨论了其他安全措施,例如每个类型一个bucket的分配策略以及更严格的单页分配方法。

阅读更多
未分类 Arena分配器

从成功的Rust重写项目中汲取的经验教训

2024-10-30

作者回顾了一个C++项目到Rust的增量式重写过程,总结了Rust的优势和遇到的挑战。优势包括简化代码、提升性能、更容易发现代码bug、方便的跨平台编译和内置测试框架。劣势主要集中在与C/C++交互时,`unsafe`代码块易引入未定义行为,Miri和Valgrind的局限性,内存泄漏问题,跨平台编译和Cbindgen工具的不足,不稳定的ABI,缺少自定义内存分配器的支持,以及Rust本身和FFI相关的复杂性。作者认为Rust在纯Rust项目中表现出色,但在与C/C++交互时仍存在很多问题,并表示未来可能会考虑使用Zig进行类似的重写工作。

阅读更多
未分类

像 1987 年那样从头开始写一个电子游戏

2024-06-20

本文介绍了如何使用 Odin 编程语言和 X11 协议从零开始编写一个类似于扫雷的游戏。文章详细讲解了连接 X 服务器、创建窗口、加载资源、处理键盘和鼠标事件以及实现游戏逻辑的步骤,并提供了完整的代码示例。作者强调了这种方法的优势在于应用程序体积小巧、独立性强,可以在任何 Unix 系统上运行。

阅读更多
未分类 Odin 编程语言