源码阅读心得

2023-11-09

简单记录一下自己最近一段时间阅读一个C语言开源项目的心得
1、阅读工具
source insight 4.0 + gdb + Typora
2、阅读心得
1)不要陷在代码的实现细节里面出不来,浪费时间。因为稍微大一点的开源项目,都有很多自定义的结构体,这些结构体封装了大量的实现细节,特别是C语言的指针满天飞,看一会头就昏了。所以在看的时候,要先抓住整个实现的骨架,而不是枝干。什么是骨干?**就是这个程序本质上是什么。(可以尝试用一句话来概述)**比如有一处解析mp4文件的实现,通过gdb跟踪,就会发现,**这段程序本质上就是树的遍历,并做了优化。**这样就对实现有了整体把握,不至于盲人摸象。
2)多动笔,多画图
刚才还看的一个结构体的声明,结果过了一会就忘了,这个时候不妨可以自己在纸上多画画,用图展示出来更形象帮助理解,如上面提到的基于树的遍历的mp4 box解析。
3)基本功
之前对基本功的理解多来自于网上前辈们的分享,就是要知道OS知识,数据结构体、计算机网络等。在阅读了这个程序后,发现基本功从编程角度讲还应该包括:对字符串遍历,递归程序这些在学习编程的时候必练的练习十分熟悉。这些被挑选出来作为我们编程入门的基础练习必然是有原因的——再复杂的程序都是由简单程序经过一定组织堆砌出来的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

源码阅读心得 的相关文章

  • React-router v6 在 Class 组件和非组件代码中的正确用法

    最近内部正在开发的 react 项目 react router 全线升级到了 v6 版本 v6 版本中很多 API 进行了重构变更 导致很多旧写法失效 下面记录一下 history 模块在 v6 中的用法 一 在封装的 request 等非
  • 2、进程通信

    进程通信 进程通信 1 进程建通信概述 1 目的 2 来源 3 进程间通讯方式包括 2 管道通讯 1 无名管道 2 命名管道 3 信号通讯 4 共享内存 进程通信 1 进程建通信概述 1 目的 为何需要进程间通信 1 数据传输 一个进程需要
  • MySQL中Index与Key的区别

    看似有差不多的作用 加了Key的表与建立了Index的表 都可以进行快速的数据查询 他们之间的区别在于处于不同的层面上 Key即键值 是 关系模型理论中的一部份 比如有主键 Primary Key 外键 Foreign Key 等 用于 数
  • 计算机网络笔记(四):Socket编程

    文章目录 前言 Socket API 函数 WinSock为例 数据解析 网络字节顺序 解析服务器IP地址 端口号 解析协议号 TCP UDP客户端软件流程 服务器软件设计 前言 几种典型的应用编程接口 Berkeley UNIX操作系统定
  • 赋能数字经济发展的数字政府建设:内在逻辑与创新路径

    数字政府的兴起是政府部门对经济演进到数字形态的自我适应 也是我国深化改革赋能数字经济发展的关键举措 面对数字经济条件下市场体系的特征变化及面临挑战 本文提出 数字政府赋能的核心在于增进市场机能 进而更好发挥出市场作用 赋能的关键在于要素释放
  • Oracle、MySQL 合并重复不需要显示的数据到同一行

    Oracle 原sql SELECT S SOURCE ID S DURATION FROM S TRAININGRECORD S WHERE 1 1 AND S USER CODE 2 ORDER BY S SOURCE ID S STA
  • 有向图的拓扑排序

    有向图的拓扑排序的基本思想是 首先在有向图中选取一个没有前驱的顶点 将其输出 从有向图中删除该顶点 并且删除 以该顶点为尾 的所有有向图的边 重复以上的步骤 直到图中的 所有顶点均输 出或是图中的 顶点均没有前驱 为止 对于后者 说明有向图
  • 网络安全入门学习第五课——MySQL运算函数集合

    文章目录 前言 一 COUNT 二 SUM 三 AVG 四 MAX 五 MIN 前言 MySQL中包括COUNT SUM AVG MAX 和MIN 当需要对表中的记录求和 求平均值 查询最大值和查询最小值等操作时 可以使用集合函数 GROU
  • ModuleNotFoundError: No module named ‘MultiScaleDeformableAttention

    需要编译一下 下载这个项目的代码GitHub fundamentalvision Deformable DETR Deformable DETR Deformable Transformers for End to End Object D
  • LAMP环境的搭建与部署

    目录 一 LAMP是什么 二 LAMP是怎么协同工作的 为什么需要的是这四个组合 三 搭建LAMP环境 gt 部署WEB程序 1 LAMP环境作用 四 LAMP环境搭建过程 1 安装apache 2 安装mysql 一 LAMP是什么 Li
  • Mac 抓包工具 Charles安装和破解教程

    1 环境 mac 10 13 charles 4 2 2 安装 官方地址 https www charlesproxy com 3 破解 1 可以参考CSDN博客上面的破解教程 比如修改charles jar文件或者替换掉原来的软件 2 可
  • 【R语言】——火山图绘制

    本期介绍利用R语言筛选差异表达基因及绘制火山图 一 什么是火山图 火山图 volcano plot 是散点图的一种 它将统计测试中的统计显著性量度 如p value FDR 和变化幅度相结合 从而可以快速直观地识别那些变化幅度较大且具有统计
  • 写一篇关于挠脚心的文章

    挠脚心是一种常见的不适症状 它指的是在脚底部或脚趾处感到刺痛或针刺感 挠脚心可能是由于多种原因引起的 其中常见的原因有 高弓足 高弓足是指脚弓高度过高 导致脚底和脚趾处压力过大 引起挠脚心 足部运动损伤 长期运动或活动过度可能导致脚底和脚趾
  • SDNU 1224.Tom'problem B(迪杰斯特拉)

    Description Tom is a student in Shan Dong Normal University his University in the suburbs this day Tom wanted to go to t
  • 《马克思主义基本原理概论》第 1 章世界的物质性及发展规律

    未完待续
  • Python-GIL深度理解

    1 GIL介绍 GIL 意为全局解释器锁 是cPython执行多线程 进程计算密集型代码效果不如人意的主要原因 cPython限制一个进程内同时只能执行一个线程 首先介绍一下 正常多线程 进程执行时 多线程 进程数据混乱的原因 cpu分成多
  • Ubuntu中安装Python的mysqlclient的相关命令

    在Ubuntu中安装Python的mysqlclient的相关命令 安装MySQL数据库 具体步骤如下 apt get update apt get install python pip 已经有pip命令则跳过此步骤 apt get ins
  • 搭建个人网站,服务器应该怎么选择。

    新手怎么去挑选服务器的配置呢 目前不管是个人还是企业 只要是需要在网上开展业务的话 都需要有自己的网站或者应用程序 VPS因为性能较低使用不太方便 渐渐被淘汰出市场 那么在各类服务器的选项下 怎么选择适合的配置呢 一 服务器区域 影响一个网

随机推荐

  • VMware安装ubuntu连接互联网和主机

    1 需求 ubuntu既需要连接互联网也需要和主机进行ssh操作 2 实现 2 1 VMware查看NAT IP 如下图 VMware随机生成的一个IP 无需手动修改 2 2 对虚拟机设置使用NAT模式 2 3 修改物理机网卡 修改物理机v
  • Mybatis、MybatisPlus自定义返回单个Map集合

    1 mybatis返回单个map存单条数据 mapper接口 Map
  • 【Fluent】雷诺方程:推导与求解(附MATLAB代码)

    目录 引言 雷诺方程的推导 雷诺方程的解 雷诺方程的推广 有限体积法 引言 雷诺方程 即湍流的平均运动方程 所属黏性不可压缩流体动力学 从Navier Stokes方程派生 是经典润滑理论的基本方程之一 1886年 奥斯本 雷诺兹 Osbo
  • 【单片机毕业设计】【dz-078】基于物联网的环境测控系统设计

    最近设计了一个项目基于物联网的环境测控系统设计 与大家分享一下 一 基本介绍 项目名 WIFI环境监测 实物 项目编号 mcuclub dz 078 单片机类型 STM32F103C8T6 具体功能 1 通过DHT11检测温湿度 当温湿度超
  • Python判断字符串是否为字母或者数字

    str 1 123 str 2 Abc str 3 123Abc isdigit函数判断是否数字 print str 1 isdigit True print str 2 isdigit False print str 3 isdigit
  • 算法笔记——力扣。持续更新

    动态规划 算法复习 动态规划 HongmingYou 博客园 T583
  • 【tflearn系列教程】(二)如何安装tflearn

    本教程参考自tflearn官方文档 英文版 http tflearn org 主要是对官方文档的翻译与讲解 并结合本人实战经验而作 如有错误 欢迎指出 作者 totorocyx 邮箱 847994259 qq com 转载请联系 一 从te
  • Android Service 加载 GLSurfaceView 显示动画

    先说遇到的需求 要在不影响前台应用的情况下 弹出一些通知 且样式比较花哨 所以用后台Service GLSurfaceView的方式做个小demo 趟一趟路 实现的效果就是这样了 就是桌面有个cube一直转圈圈 不影响其他任何操作 简单来说
  • 西门子1500可编程逻辑控制器语言介绍(1)----CEM语言

    一 CEM的基本信息 1 CEM编程语言介绍 cem编程语言又称因果矩阵 用于快速的将原因与结果之间的关系清晰地表达出来 在该编程语言中 过程事件称为 原因 过程之后的反映称为 结果 一个 原因 可以激活多个结果 结果由列表示 原因与结果的
  • MobaXterm_Personal_10.9 密钥生成及使用

    MobaXterm Personal 个人认为要比PuTTY SmarTTY SecureCRT XShell等SSH终端功能界面交互 功能上好许多 它可以和虚拟机中的Linux共享一套配置信息 本文简单交流一下关于MobaXterm密钥生
  • 【cdk的使用】C语言 跨平台的原子操作

    Github地址 https github com wujin1989 cdk 有过C开发的朋友都知道 在不同平台上原子操作的API是不一样的 这就导致如果想开发一个跨平台的lock free程序是痛苦的 怎么办 凉拌 只能手撸 好在cdk
  • 【读书笔记——开关电源】《精通开关电源设计》(1)

    第一章 开关功率变换原理 文章目录 第一章 开关功率变换原理 前言 1 1 概念和基本术语 1 2 电感 电感充放电的基本原理 功率变化中的稳态与不同工作模式 伏秒定律与占空比 开关器件的使用与保护 1 3 开关拓扑的演变 通过二极管控制感
  • 从自动贩卖机找零看Python中的动态规划问题

    原文 http www jianshu com p 144db81341a3 从自动贩卖机找零看Python中的动态规划问题 问题描述 假设在某国存在 1 x1 x2 x3 xn 多种货币 该国的自动贩卖机在找零时要遵循一个原则 找零的总张
  • LeetCode 62. 不同路径

    62 不同路径 一个机器人位于一个 m x n 网格的左上角 起始点在下图中标记为 Start 机器人每次只能向下或者向右移动一步 机器人试图达到网格的右下角 在下图中标记为 Finish 问总共有多少条不同的路径 示例 1 输入 m 3
  • ubuntu使用记录(2)在ubuntu下安装ssh时一直显示E: 无法定位软件包 sshd

    在ubuntu下安装ssh时一直显示E 无法定位软件包 sshd 安装方法 点击我们屏幕左上角的小齿轮 设置 gt 关于 gt 系统设置 gt 软件和更新 在点击其他后会跳出 我们直接点击选择最佳服务器即可 我电脑上是清华的最快
  • LeetCode 135. 分发糖果--排序判断

    分发糖果 老师想给孩子们分发糖果 有 N 个孩子站成了一条直线 老师会根据每个孩子的表现 预先给他们评分 你需要按照以下要求 帮助老师给这些孩子分发糖果 每个孩子至少分配到 1 个糖果 评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果 那
  • 面试题2021.11.29----java基础

    2021 11 29 java基础 1 请你解释为什么会出现4 0 3 6 0 40000001这种现象 答 这是因为二进制数没办法准确的表示十进制数的数 十进制的小数在转化为二进制是会有误差 导致该运算结果的诞生 2 请你说说Lamda表
  • Exps on March 25th

    时差 What s your time there What time is it over there 在你那里 现在是几点啊 Greenwich Mean Time GMT 格林威治时间 0时区 伦敦标准时间China is locat
  • 操作系统怎么访问docker内的MySQL

    操作系统怎么访问docker内的MySQL 怎么访问docker内的MySQL 1 获取mysql镜像 docker pull mysql 5 6 2 启动mysql镜像 推荐学习 MySQL视频教程 docker run itd P my
  • 源码阅读心得

    简单记录一下自己最近一段时间阅读一个C语言开源项目的心得 1 阅读工具 source insight 4 0 gdb Typora 2 阅读心得 1 不要陷在代码的实现细节里面出不来 浪费时间 因为稍微大一点的开源项目 都有很多自定义的结构