linux链表分析(一)源码独立

代码已经上传到github https://github.com/zhigang124/helloworld 

这里谈几点感想:

1、很多代码没必要都在脑海里形成完整的链路,类似于数学题那样,没有必要,年龄大了,脑袋转不动了

2、程序的有限测试性,就是说规划的特性,满足的用例都测试通过,就认为可用

3、需要心无旁骛,每周都要坚持写3-5篇博客,坚持下来,今天坐在这里,心里还是想着打游戏,心里不安定,万事开头难,以后一定会更好

4、不要想很多其他事,自己无力改变,徒增烦恼,能做的事情就是努力做好自己本职的事情,提高自己。

5、孔令贤的博客今天看了一下,自己应该跳出来从大一到现在的固执的技术思维,认为自己懂很多就可以,工程人员不仅要懂得多,现在还没有到深的程度,更要其他软能力,比如 UT/ST测试,测试理论,常用debug工具的使用,版本管理工具git等等这些软能力,都是不能欠缺的。

6、今天已经搞了快俩小时了,以后每天11点睡觉,今天就到这里为止。每天都按照计划去走,好过一天突飞猛进,一天毫无进展那样的不稳定状态,心态要平和,明白很多事不是一朝一夕就能解决的。

明天的计划,把这个list程序好好调试一番,根据验证的结果,验证猜想,不要去费脑筋去空想,动手更容易一些。另外,每个细节都要搞清楚,比如 volatile和 inline带来的性能优势,比如UT和ST怎么写,比如gcc工具的使用,比如进程的生成,linux进程代码的分析,内存的分配,由这个程序扎根下去,从上到下这是个引子,现在先说提高自己的基础吧。前沿的东西有很多,不能一会这个,一会那个。只要坚持下去,一年下来总会有收获。

就怕没有规划,没有总结,每天糊涂的过着。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、linux内核链表 1、普通链表的数据区域的局限性 之前定义数据区域时直接int data,我们认为我们的链表中需要存储的是一个int类型的数。但是实际上现实编程中链接中的节点不可能这么简单,而是多种多样的。 一般实际项目中的链表,节点中存储的数据其实是一个结构体,这个结构体中包含若干的成员,这些成员加起来构成了我们的节点数据区域。 2、一般性解决思路:即把数据区封装为一个结构体 (1)因为链表实际解决的问题是多种多样的,所以内部数据区域的结构体构成也是多种多样的。 这样也导致了不同程序当中的链表总体构成是多种多样的。 我们无法通过一套泛性的、普遍适用的操作函数来访问所有的链表,意味着我们设计一个链表就得写一套链表的操作函数(节点创建、插入、删除、遍历……)。 (2)实际上深层次分析会发现 不同的链表虽然这些方法不能通用需要单独写,但是实际上内部的思路和方法是相同的,只是函数的局部地区有不同。 实际上链表操作是相同的,而涉及到数据区域的操作就有不同 (3)问题 能不能有一种办法把所有链表中操作方法里共同的部分提取出来用一套标准方法实现,然后把不同的部分留着让具体链表的实现者自己去处理。 3、内核链表的设计思路 (1)内核链表中实现一个纯链表的封装,以及纯链表的各种操作函数 纯链表就是没有数据区域,只有前后向指针; 各种操作函数是节点创建、插入、删除、遍历。 这个纯链表本身自己没有任何用处,它的用法是给我们具体链表作为核心来调用。 4、list.h文件简介 (1)内核中核心纯链表的实现在include/linux/list.h文件中 (2)list.h中就是一个纯链表的完整封装,包含节点定义和各种链表操作方法。 二、内核链表的基本算法和使用简介 1、内核链表的节点创建、删除、遍历等 2、内核链表的使用实践 (1)问题:内核链表只有纯链表,没有数据区域,怎么使用? 使用方法是将内核链表作为将来整个数据结构的结构体的一个成员内嵌进去。类似于公司收购,实现被收购公司的功能。 这里面要借助container_of宏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值