避免内联汇编常见错误的规则
本文并非内联汇编教程,而是总结了避免常见内联汇编错误的六条规则。作者指出,内联汇编易出错,应尽量避免,现代编译器提供了丰富的内建函数替代方案。如果必须使用,则需注意:尽可能使用`volatile`限定符;如果访问内存,则需要`memory` clobber;切勿修改输入约束;不要在内联汇编中调用函数;不要定义绝对汇编标签;使用汇编程序的局部标签特性来避免标签冲突。文章最后鼓励读者通过实践来巩固这些规则,例如检查在线教程中的错误。
阅读更多
本文并非内联汇编教程,而是总结了避免常见内联汇编错误的六条规则。作者指出,内联汇编易出错,应尽量避免,现代编译器提供了丰富的内建函数替代方案。如果必须使用,则需注意:尽可能使用`volatile`限定符;如果访问内存,则需要`memory` clobber;切勿修改输入约束;不要在内联汇编中调用函数;不要定义绝对汇编标签;使用汇编程序的局部标签特性来避免标签冲突。文章最后鼓励读者通过实践来巩固这些规则,例如检查在线教程中的错误。
阅读更多
本文探讨了在C++中使用竞技场分配和自定义字符串的技巧,并分析了其优缺点。作者的目标是尽量减少C++复杂性的接触,仅使用少量的高价值特性。文章首先介绍了一种基于模板的竞技场分配方法`make`,它比C语言中的宏更具优势,可以直接在竞技场中构造对象并进行值初始化。然后,作者讨论了自定义字符串类型`s8`,类似于`std::string_view`,并实现了构造函数、`operator==`和`operator[]`等功能,提高了易用性。然而,作者发现这些自定义构造函数在编译时无法可靠地构造静态字符串,提出了使用联合体的解决方案。最后,作者简要提及了泛型动态数组和函数重载等其他特性,并总结了C++在空指针语义方面的改进。
阅读更多
本文作者分享了在本地运行大型语言模型(LLM)的经验和心得。作者介绍了运行LLM所需的软硬件,推荐了llama.cpp作为运行软件,并列举了一些不同规模和特性的模型,如Mistral-Nemo-2407、Qwen2.5、Gemma-2-2B等,并分享了它们各自的优缺点和适用场景。作者还提到了自己开发的命令行工具Illume,用于与LLM交互。最后,作者探讨了LLM的局限性,例如可信度问题、上下文长度限制以及编程能力不足等,并列举了LLM目前的一些实际应用,包括校对、写作、语言翻译等。
阅读更多
本文探讨了Windows动态链接对活动代码页的依赖关系。尽管Windows路径长期以来采用WTF-16编码,但可移植可执行文件导入表中的模块名称却是以字节形式存在的。当名称包含超出ASCII范围的值时,动态链接器必须将这些字节解码为Unicode才能构建查找路径。作者通过实验发现,链接器加载的DLL可能会因系统代码页而异,并解释了其背后的技术细节。
阅读更多
本文介绍了如何为 C++ std::regex 库创建一个简洁的 C 语言接口,隐藏 C++ 实现细节并简化内存管理。文章详细讲解了接口设计、C++ 实现过程以及使用示例。作者还分析了这种方法的优缺点,例如缺乏 Unicode 支持、std::regex 实现效率低等问题,建议开发者根据实际需求权衡利弊。
阅读更多
本文介绍了一种基于竞技场的编程范式,并提出了一种使用级联运算符实现动态增长的简洁技术。作者首先介绍了级联运算符的核心代码,该运算符可以在竞技场中高效地将两个相同类型的对象连接起来。然后,作者以字符串为例,展示了如何使用级联运算符构建字符串,并将其应用于路径处理等场景。此外,作者还讨论了如何扩展级联运算符以支持其他数据类型,例如整数和 Unicode 字符。最后,作者将级联运算符的概念扩展到其他数据结构,如数组和列表,展示了其在构建动态数据结构方面的应用。
阅读更多