lthw

笨办法学C 练习17:堆和栈的内存分配

练习17:堆和栈的内存分配原文:Exercise 17: Heap And Stack Memory Allocation译者:飞龙在这个练习中,你会在难度上做一个大的跳跃,并且创建出用于管理数据库的完整的小型系统。这个数据库并不实用也存储不了太多东西,然而它展示了大多数到目前为止你学到的东西。它也以更加正规的方法介绍了内存分配,以及带领你熟悉文件处理。我们实用了一些文件I

笨办法学C 后记:“解构 K&R C” 已死

“解构 K&R C” 已死原文:Deconstructing K&RC Is Dead译者:飞龙我彻底失败了。我放弃了多年以来尝试理清C语言如何编写的想法,因为它的发明是有缺陷的。起初,我的书中有一章叫做“解构 K&R C”。这一章的目的是告诉人们永远不要假设它们的代码是正确的,或者对于任何人的代码,不管它有多出名,也不能避免缺陷。这看起来似乎并不是革命性的想法,并且对我来

笨办法学C 练习45:一个简单的TCP/IP客户端

练习45:一个简单的TCP/IP客户端原文:Exercise 45: A Simple TCP/IP Client译者:飞龙我打算使用RingBuffer来创建一个非常简单的小型网络测试工具,叫做netclient。为此我需要向Makefile添加一些工具,来处理bin/目录下的小程序。扩展Makefile首先,为程序添加一些变量,就像单元测试的TESTS和TEST_SRC

笨办法学C 练习47:一个快速的URL路由

练习47:一个快速的URL路由原文:Exercise 47: A Fast URL Router译者:飞龙我现在打算向你展示使用TSTree来创建服务器中的快速URL路由。它适用于应用中的简单的URL匹配,而不是在许多Web应用框架中的更复杂(一些情况下也不必要)的路由发现功能。我打算编程一个小型命令行工具和路由交互,他叫做urlor,读取简单的路由文件,之后提示用户输入要

笨办法学C 练习46:三叉搜索树

练习46:三叉搜索树原文:Exercise 46: Ternary Search Tree译者:飞龙我打算向你介绍的最后一种数据结构就是三叉搜索树(TSTree),它和BSTree很像,除了它有三个分支,low、equal和high。它的用法和BStree以及Hashmap基本相同,用于储存键值对的数据,但是它通过键中的独立字符来控制。这使得TSTree具有一些BStree

笨办法学C 练习41:将 Cachegrind 和 Callgrind 用于性能调优

练习41:将 Cachegrind 和 Callgrind 用于性能调优原文:Exercise 41: Using Cachegrind And Callgrind For Performance Tuning译者:飞龙这个练习中,我打算上一节速成课,内容是使用Valgrind的两个工具callgrind和cachegrind。这两个工具会分析你程序的执行,并且告诉你哪一部

笨办法学C 练习43:一个简单的统计引擎

练习43:一个简单的统计引擎原文:Exercise 43: A Simple Statistics Engine译者:飞龙这是一个简单的算法,我将其用于“联机”(不储存任何样本)收集概要统计。我在任何需要执行一些统计,比如均值、标准差和求和中使用它,但是其中我并不会储存所需的全部样本。我只需要储存计算出的结果,它们仅仅含有5个数值。计算标准差和均值首先你需要一系列样本。它可

笨办法学C 练习44:环形缓冲区

练习44:环形缓冲区原文:Exercise 44: Ring Buffer译者:飞龙环形缓冲区在处理异步IO时非常实用。它们可以在一段接收随机长度和区间的数据,在另一端以相同长度和区间提供密致的数据块。它们是Queue数据结构的变体,但是它针对于字节块而不是一系列指针。这个练习中我打算想你展示RingBuffer的代码,并且之后你需要对它执行完整的单元测试。# ifndef

笨办法学C 练习37:哈希表

练习37:哈希表原文:Exercise 37: Hashmaps译者:飞龙哈希表(HashMap、HashTable以及Dictionary)广泛用于许多动态编程语言来储存键值对的数据。哈希表通过在键上执行“哈希”运算产生整数,之后使用它来寻找相应的桶来获取或储存值。它是非常快速的使用数据结构,因为它适用于任何数据并且易于实现。下面是哈希表(也叫作字典)的一个使用示例:fr

笨办法学C 练习38:哈希算法

练习38:哈希算法原文:Exercise 38: Hashmap Algorithms译者:飞龙你需要在这个练习中实现下面这三个哈希函数:FNV-1a以创造者Glenn Fowler、Phong Vo 和 Landon Curt Noll的名字命名。这个算法产生合理的数值并且相当快。Adler-32以Mark Adler命名。一个比较糟糕的算法,但是由来已久并且适于学习。D