自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(103)
  • 资源 (4)
  • 收藏
  • 关注

原创 lemon源码分析

基本概念见上篇《lemon源码基本概念整理》1. follow集对于如下4条产生式 program ::= expr TK_SEM expr ::= expr TK_IMPL expr expr ::= TK_LPAREN expr TK_RPAREN expr ::= TK_NEG expr现在要求expr ::= TK_LPAREN expr TK_RPAREN*的follow集方法如下 exp

2021-03-07 19:16:15 687

原创 lemon源码基本概念整理

1 数据结构1.1 字符串存储定义一个x1a的全局变量,存放.y文件经过词法分析器分割出来的字符串struct s_x1 { int size; /* The number of available slots. */ /* Must be a power of 2 greater than or */ /* equal to 1 */ int count

2021-03-04 21:24:33 678 1

原创 gobject调试环境搭建

1 初步使用新建个工程,把下面这个demo里的3个文件拷贝到src目录https://github.com/zorgnax/gobject-examples/tree/master/01-media-from-book编写Makefile# 请自行新建一个bld文件夹OBJ_DIR = ../bld# 获取所以源文件 SRC = cleanable.c media.c# 把.c后缀替换为.o,并加上目录 OBJ = ${patsubst %.c, ${OBJ_DIR

2021-02-26 08:35:31 865

原创 gdb源码中的print命令实现

源码的搭建环境可以参考下面这篇文章windows下编译gdb源码首先随便写了个测试程序 int c = 51115; int b[10] = {0}; int *p = malloc(40); sprintf(b,"%p",p); c +=b[0]&0xff; //随便赋一个非常量值,如果是常量的话编译时就直接算好写到PE文件里了 printf("%d\n",c); //这里是86行,打印出来是51163gdb脚本如下,文件名是sdx.txt,执行时加上-comman

2021-02-16 21:51:12 542

原创 SQLite源码学习(40) balance初步分析

主要分析balance_nonroot()函数里的代码1.iParentIdx和nxDiv的作用iParentIdx的来源是iIdx = pCur->aiIdx[iPage-1];在btree中查找叶子结点是从根结点开始一层层往下,iParentIdx就是查找到当前结点时,父结点对应第几个cell当孩子结点分裂成2半时,需要把一个cell移到父结点,这个cell对应的偏移地址由nxDiv决定,对应的代码如下 int nxDiv; /* Next di

2020-11-11 22:05:05 425

原创 SQLite源码学习(39) balance的一些准备工作

1.balacne的第一个判断条件if( pPage->nOverflow==0 && pPage->nFree<=nMin )pPage->nOverflow表示btree节点满了,需要分裂,pPage->nFree<=nMin

2020-11-08 13:19:02 362

原创 SQLite源码学习(38) 对表的一些处理

1.删除后进入balance()删除的记录在表的第2页,但是进入balance()函数后,为什么pCur->iPage是0?sqlite3BtreeFirst—>moveToRoot

2020-11-04 22:05:36 362

原创 搭建msys2基础开发平台

1.环境搭建最近msys2的软件源进行了更新,一些低版本的软件都没有了,gcc只有9.3以上版本,gdb只有9.1以上版本,没有低版本,那以后只能跟着软件源的最新版本走了,如果碰到软件依赖版本不兼容将会是一个非常棘手的问题,而且gcc和gdb正在狂热的将c代码都替换为c++,但是我本人不太喜欢c++,所以尝试搭建一个不依赖软件源的平台。清华和腾讯开源镜像都已经随着官方的源更新了,幸好华为和浙大的镜像还没更新,但是迟早也会更新的,所以在他们更新之前赶紧把这个事情做了。基础安装包,我用的是msys2-ba

2020-10-24 21:58:09 2724 3

原创 uftrace关键代码记录

uftrace是一个跟踪程序的函数调用记录的一个工具,代码见https://github.com/namhyung/uftrace参数解析使用的argp,我把glibc里的argp模块单独提取出来了,见argp模块参数解析完会执行各种命令 switch (opts.mode) { case UFTRACE_MODE_RECORD: ret = command_record(argc, argv, &opts); break; case UFTRACE_MODE_REPLAY:

2020-10-20 21:57:56 401

原创 虚拟机建立samba服务

vmware使用nat模式启动,在vmware的虚拟网络编辑器的nat的vmnet8网络设置网关地址,在控制面板网络适配器页面设置vmnet8的ip地址,虚拟机启动后,用fconfig确认Ubuntu的ip地址为nat所在网段改了之后的IPubuntu:192.168.23.128vmnet8网关:192.168.23.1vmnet8 ip:192.168.23.5主机ip:192.168.1.10然后192.168.1.10和192.168.23.128可以互ping参考下面这篇文章htt

2020-10-07 16:03:15 782

原创 cuda和gpu的基本概念整理

SP(streaming Processor)是gpu最基本的硬件单元,俗称cuda核心(类似于cpu的一个核),多个sp组成一个SM(Streaming Multiprocessor),我的gtx 1060显卡是1920核心的,10个sm,每个sm有128个spCUDA中grid、block、thread、warp与SM、SP的关系https://blog.csdn.net/wvh2007/article/details/49891363CUDA 核函数运行参数https://blog.csdn.

2020-10-02 19:28:42 4927

原创 tensorflow安装

Anaconda下载,Anaconda3-5.2.0-Windows-x86_64的版本:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/安装时把PATH环境变量勾上,其他默认。以管理员身份运行cmd,然后配置清华镜像,输入指令:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --set sho

2020-09-26 07:48:04 217

原创 gtx1060的cuda9.1安装记录

先安装vs2017,2个关键地方要勾选一下,其他参考网上的教程把电脑上显卡驱动还有所有nvidia的相关软件都卸载了,然后去https://developer.nvidia.com/cuda-toolkit-archive下载9.1的版本安装时选择精简安装,其他一切默认...

2020-09-25 21:09:48 1047

原创 SQLite源码学习(37) 页面格式

1.第一个cell的内容是怎么写进去的

2020-08-12 19:51:26 379

原创 基于msys2的tcl源码构建

我是从github下的tcl-core-9-0-a1版本,解压后进入源码目录,执行以下命令mkdir bldcd bld../unix/configure make -j12出现如下错误/d/tcl-core-9-0-a1/generic/tclCmdAH.c:2151:63: 错误:‘Tcl_StatBuf’ {或称 ‘struct <匿名>’}没有名为‘st_blocks’的成员 2151 | STORE_ARY("blocks", Tcl_NewWideIntObj

2020-08-09 13:47:50 387

原创 SQLite源码学习(36) Btree杂记

1.在newDatabase函数中写入数据库头100字节时为什么不会把原来的覆盖掉关键代码如下: if( pBt->nPage>0 ){ return SQLITE_OK; }只有在数据库为空的时候才写入,不为空的时候直接返回了,不会往下执行。...

2020-08-09 13:46:46 479

原创 前端调试入门的一些记录

关于Http请求header之Referer讲解https://www.jianshu.com/p/1a6abab212ed谷歌浏览器开发调试工具中Sources面板 js调试等 完全介绍https://blog.csdn.net/c15158032319/article/details/79716877

2020-05-10 18:01:08 322

原创 gcc源码编译

编译是基于msys2平台,使用的源码是gcc-7.3.0-1.src.tar.gz解压后执行 makepkg --skippgpcheck会报错,提示缺少依赖,根据错误提升安装相关依赖pacman -S mpc-devel gmp-devel mpfr-devel isl-devel出现找不到cmp的命令需要安装diffutils: pacman -S diffutils继续执行ma...

2020-05-08 08:08:05 1429

原创 fossil源码编译

fossil是一个类似git的版本控制工具,是由SQLite作者写的,代码的水平应该比较高,fossil还提供了web展示的功能,支持http接口,综合性比较强,对于c语言程序员来说也可以初步了解一些前端和后端的知识,比较有学习价值。1.源码下载学习代码最好的方式当然是自己编译并调试,我是基于msys2开发环境。首先到官网下载发布的版本,选择Source Tarball下载http://w...

2020-04-18 08:56:04 763 1

原创 windows下编译gdb源码

在学习编译gdb的过程中,一定要和本文出现的各软件版本保持一致,否则很容易因为版本的原因出现一些奇怪的问题。1.搭建msys2环境在win下编译gdb首先要搭建msys2的开发环境,先从官网下载msys2-i686-20190524.exehttps://www.msys2.org/官网以后会更新版本,为了和本文写的版本保持一致,最好在清华镜像站找到msys2-i686-20190524....

2020-04-11 22:29:13 2282

原创 eclispe设置断点无效(No source file named)

最近不知道做了什么操作导致eclipse的断点无效,表现为gdb只认相对路径的断点,不认绝对路径,而eclipse打断点使用的是绝对路径,导致无效,输出信息是:No source file named默认情况下是不存在这个问题的,不知道怎么恢复成默认,但有一种有效的解决方法:Debug->Debug Configuration->Source->Add->Path-&...

2020-04-11 08:31:10 984 1

原创 SQLite源代码编译调试

1.在msys上编译本文介绍的是windows平台,所以首先要安装msys2环境,这里就不细说了,具体可以参考下面这篇文章:https://blog.csdn.net/qiuzhiqian1990/article/details/56671839一开始要下载源代码,官网地址如下https://www.sqlite.org/download.html选择包含全部源文件的版本,11.93M的...

2020-03-08 17:39:39 2356

原创 嵌入式linux之nfs挂载及gdb调试环境的搭建

nfs即网络文件系统,要挂载nfs之前首先要让开发板和ubuntu可以相互ping通。一般在vmware上运行ubuntu,为了能够上网,启动时在网络适配器的选项中选择NAT模式,NAT模式的意思就是和主机共享网络,主机能上网则虚拟机也能上网主机不能上网虚拟机也不能上网。启动ubuntu后,此时是能联网状态,需要先安装NFS相关的两个软件:sudo apt-get install rpcbin...

2019-10-25 11:37:24 1315

原创 嵌入式linux入门笔记

学习的是韦东山的2440板子一开始假设是裸板,首先要用jtag把uboot烧到nor flash,完成后拔掉jtag,然后板子从nor flash,刚开始启动时马上按空格键进入uboot选择菜单,菜单中可以选择烧写普通bin文件到Nand Flash,也可以选择烧写内核或根文件系统到Nand Flash,选择好后,由PC端通过USB把程序文件传输给u-boot,再由u-boot把程序烧写到Nan...

2019-10-24 14:08:51 479

原创 Eclipse CDT初步使用教程

我用过Source insight和VS,感觉不顺手就没用了,所以也没有深入研究过,其他的如Code::Blocks,vim,Clion, Emacs我也没用过,不好做评价,反正我用Eclipse用的很舒服,这里给大家分享一下,多提供一种选择,如果你是刚学C语言或者你当前的IDE用的不爽,可以尝试一Eclipse。1.外观主界面调试界面,子窗口都是可以拖动的,可以根据自己的喜好配置成合适的...

2019-10-16 17:49:35 16765 3

原创 ucc编译器分析与总结(5) 中间代码生成

1.基本框架经过语义检查后,现在已经有了包含符号和类型的完整语法树,现在要做的事情就是继续沿着语法树走一遍,对每条语句和表达式生成相应的中间代码。中间代码以三地址码的形式表示,由两个源操作数,一个目的操作数和一个运算符组成。然后uccc在生成中间代码时以基本块为单位,每个基本块包含若干条中间代码,基本块的开头都会有类似BB1:这样的标签。从静态上来看,所有基本块按顺序通过双向链表连接在一起,...

2019-08-25 16:48:16 583

原创 词法分析器flex和语法分析器lemon的初步使用

自己手写词法分析器和语法分析器是很麻烦的一件事,而且这里面的逻辑非常复杂很容易出错。flex和lemon就是用来帮助生成词法分析器和语法分析器的,只需要写少量规则代码,就可以生成解析的c代码。现在先不关注实现原理,主要看一下这东西是怎么用的,等以后用熟了要实现深度定制的时候再来看实现源码。1.词法分析器首先得安装一个flex,至于怎么安装就不讲了。词法分析器的功能就是把一串字符串按照给定的规则...

2019-08-12 12:03:15 2122

原创 makefile基本模板

编译时一直以来都是用eclispe自带的自动编译,由于需要对其他开源代码的makefile做一些修改,所以最近学了一下,其实还挺简单的,一些基本概念就不讲了,网上教程很多,下面来举一个基本的例子来记录一下makefile的基本用法。首先文件目录如下,编译的.o文件都放在Obj目录下然后编译时还需要一个库文件libreadline.dll.a,库所在目录为/mingw32/lib ,对应的头文...

2019-08-04 14:56:15 212

原创 ucc编译器分析与总结(4)表达式和语句检查

1.基本框架之前在语法分析时建立了抽象语法树,在声明时为每个符号建立了类型系统,接下来就要遍历表达式和语句的每个结点,将这些声明的类型绑定在对应的结点,并相应的进行语义规范的检查。每个复合语句的检查都以一个大括号为单位,在这里面又分为局部变量声明的检查和执行语句的检查AstStatement CheckCompoundStatement(AstStatement stmt){ As...

2019-08-04 10:00:44 397

原创 ucc编译器分析与总结(3) 声明检查

有了类型系统和符号管理的基础知识之后,接下来就可以分析声明检查部分的代码了。源代码经过预编译后生成.i文件,这时候代码主要分为函数语句和声明语句两部分,其实函数只不过是一种特殊的声明语句,比声明语句多了{}里面的内容。函数语句和非函数语句是分开检查的:if (p->kind == NK_Function){ CheckFunction((AstFunction)p);}el...

2019-07-20 16:33:40 615

原创 ucc编译器分析与总结(2) 类型系统和符号管理

在语法分析的过程中,ucc按照C语言的文法构建了一颗语法树,接下来要根据语法树来进行语义检查,判断代码是否存在编译错误,譬如表达式中的变量有没有定义,定义数组的长度是否为常量,表达式中的类型是否合法等等。语义检查分为语句表达式检查和声明检查两部分,这次主要来分析声明的语义检查,在这个过程中为声明的变量构建了一个类型系统,同时对出现标识符进行管理。1 类型系统1.1 基本类型首先定义一些最基...

2019-07-20 08:42:22 579

原创 ucc编译器分析与总结(1) 语法分析

编译器、操作系统、数据库是计算机领域中的三大基础软件,基本上所有应用软件都是建立在这三个基础软件之上,这些领域经过前辈们不断打磨现在已经变得非常成熟,很多涉及到的代码技术都是精华中的精华,所以把上面3个软件搞清楚对代码水平的提高会有很多帮助,而且能够对现代计算机的软件架构有更清晰的了解。我现在要研究一个逻辑推理系统,这个推理系统以C语言为基础,这里必然涉及到C语言的解析问题,所以C语言编译器是必...

2019-07-06 16:08:37 2867

原创 四国军棋引擎开发(12)关键步加深搜索

调了很久终于能够更新一个版本了,这东西是越来越难调了,每一次输棋都要处理茫茫多的复杂逻辑,而且有些bug隐藏在递归的最深处很难定位,真希望软件可以像人一样自己学会想算法调代码做验证。这次更新大的框架没有什么改动,只是调了很多很多的bug,最主要添加的功能是在搜索时记录一些关键步,在关键步如威胁到军旗时,再加深2层,从而在残局中能调集一些子力防守。我不打算把这个软件的棋力做到顶尖,做到能稳赢...

2019-03-17 21:42:11 570 1

原创 四国军棋引擎开发(11)多线程搜索

由于现在没有什么好的办法优化剪枝来增加搜索深度,所以现在通过不同的方法进行搜索,最后综合各种搜索方法的结果选择最佳着法。每一种搜索方法是独立的,所以单独放在一个线程里搜索,如果CPU是多核的,操作系统会自动把每个线程放在不同的核心上搜索,达到了并行计算的效果。当前更新版本是2.2,大的框架基本差不多了,行棋时还有很多bug,所以胜率不是很理想,测试结果如下  1.多线程框架首先...

2019-01-05 13:00:29 385

原创 四国军棋引擎开发(10)局面评估优化

这次对局面评估做了一些优化,棋力有了一些提升,可以定为2.1版本,测试结果如下:引擎A vs 引擎B 战绩(胜:负:和) 1.1 vs 1.0 8:2:0 1.2 vs 1.1 8:2:0 1.2 vs 1.0 10:0:0 2.0 vs 1.2 8:1:1 2.0 vs 1.1 8:0:2 2.1 vs 2.0 ...

2018-12-14 22:05:17 512

原创 四国军棋引擎开发(9)子力概率判断分析

本文分为2部分,第1部分继续深入分析子力的概率问题,第2部分记录下刚刚碰到的一个非常棘手的bug,解决这个bug后,目前这个版本基本上没有什么明显的bug,可以作为版本为2.0。如果全部着法都搜索的话,1秒最多搜4层,军棋每步可行的走法太多,搜索已经很难优化了,接下来的主要优化在局面评估和局部搜索,目前2.0版本的测试结果如下:引擎A vs 引擎B 战绩(胜:负:和) 1.1 vs ...

2018-11-25 13:50:39 895

原创 四国军棋引擎开发(8)主要变例提取

alpha-beta剪枝算法对着法的搜索顺序有比较高的要求,最好是先搜索好的着法再搜索坏的着法,这样就可以最大程度的进行剪枝。在搜索前我们当然不知道着法的优劣,如果知道了那就不需要搜索了,但我们搜索时是一层层递进的,上一层搜索到的最佳着法在这一层来说也相对较优,提取出来之后我们就可以优先搜索上一层的最佳着法序列,也就是主要变例。从算法上来说,主要变例就是value介于alpha和beta之间的...

2018-10-29 08:39:31 459

原创 四国军棋引擎开发(7)概率分析与搜索优化

1.概率分析四国军棋属于不完全信息博弈,我们是看不到敌方的棋子,但是可以通过棋子间的碰撞来判断敌方的子力分布情况和棋子大小的概率。当棋子产生碰撞后,可能的判决结果有吃子、打兑、撞死3种结果,有时还会附加是否亮军旗的信息,之前的处理只是简单的把所有情况取平均值,这是不对的,因为某些情况虽然存在,但是概率特别小,如果取平均值就会对着法评分的准确性造成很大的影响,所以更好的方式应该是对每一种情况生成...

2018-10-14 14:27:58 987

原创 C语言调试内存访问出错而引起的程序崩溃问题

在写代码的时候,经常碰到由于内存访问出错而导致程序崩溃。当代码量比较多的时候,根本不知道程序错在哪里,只能不断猜测代码出错的地方,将其注释掉还会不会出现程序崩溃,这种方法虽然最后也能找到问题所在,但是会耗费大量时间。linux下调试通常会生成core dump文件,再结合gdb调试来定位问题,这种方法我没有研究过,我一般在win下的msys2环境下开发,无意中发现了一种非常有效的调试方法,我觉得...

2018-10-06 10:26:19 2121

原创 四国军棋引擎开发(6)alpha-beta剪枝算法

在讲alpha-beta剪枝算法之前先要了解最大最小算法,在棋类游戏中,给每一个局面打一个分数,轮到自己下时会选择有利于自己的下法,即选择局面分数高的,而对手会选择更加不利于自己的局面,即分数最低的。如下图所示,max结点会选择分数最高的子结点作为分值,而min结点会选择分数低的,最后得到根结点的分数。在上图中为了确定最后根结点的值,我们要查询所有叶子结点的值,事实上没有必要查询所有叶子的值,...

2018-09-30 15:18:48 2184

sqlite3的函数执行过程跟踪

对sqlite3的函数执行过程记录,针对数据库的创建,新建表,插入数据,读取数据等操作的追踪,分别使用ftrace和uftrace生成的报告

2018-02-22

sqlite3的tcl扩展源码eclipse工程

sqlite3的tcl扩展,这个是eclipse工程,已经编译通过。

2017-11-24

这份资源不对,建议删除

sqlite3的tcl扩展,这个是eclipse工程,已经编译通过。

2017-11-24

sqlite3编译通过的多文件eclipse工程

sqlite3源码的编译一般都是很多个文件合成一个文件,现在把官方多文件的源码整理成可编译的eclipse工程,使用tdm-gcc编译器器

2017-11-10

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除