- 博客(14)
- 资源 (2)
- 收藏
- 关注
原创 使用gdb查看程序异常退出调用栈
源码:#include <stdio.h>#include <iostream> using namespace std;void func(){ int a[10]; for (int i = 0; i < 11; i++) { a[i] = i; // 这里数组会溢出 }} int main(){ fprintf(stdout, "test start\n"); func(); fprintf(stdout, "test finis
2021-08-29 16:47:49
1549
原创 redis源码学习--对象
redis中把所有用到的数据结构都抽象成对象,所以对象就是对SDS,压缩列表,双向链表和字典的集合,可以分为字符串对象,列表对象,哈希对象,集合对象,有序集合对象。对象的结构体typedef struct redisObject { /* REDIS_STRING 字符串对象 REDIS_LIST 列表对象 REDIS_HASH 哈希对象 REDIS_SET 集合对象 REDIS_ZSET 有序集合对象 */ unsi
2021-07-25 18:44:13
162
原创 redis源码学习--数据结构:SDS设计和实现
redis源码学习--数据结构:SDS设计和实现SDS数据结构定义API实现SDS数据结构定义SDS是simple dynamic string的缩写,是redis定义的字符串的数据结构。根据需要保存的字符串长度的差异,不同结构体定义如下,使用的柔性数组,例如sizeof(struct sdshdr5 )只会计算flags的长度,如果写成:/* Note: sdshdr5 is never used, we just access the flags byte directly. * Howeve
2021-07-11 19:27:40
263
原创 linux中更换文件系统方法
小例子:源文件:foo.c#include<stdio.h>void foo(){ printf("infoo2\n");}test1.c#include <stdio.h>#include <unistd.h>extern void foo(void); // 避免extern 懒得写.hint main(int argc, char * argv[]){loop: foo(); sleep(1); goto loop; return
2020-08-16 20:20:14
1301
原创 redis源码学习--数据结构:跳跃表设计和实现
跳跃表可以方便实现有序存储,可以理解为链表的升级版。所以通过二分查找,可以实现平均O(logN),最坏O(N)的复杂度查找。据说大部分情况可以和平衡树相媲美,但是实现更为简单。先学习跳跃表的原理,可以参考:跳跃表的原理及实现总结几点就是:1、层是为了方便实现二分查找设计的2、理想情况下x层的元素数量是x+1层元素数量的2倍。0层保存了所有的节点,1层保存了0层奇数序的节点(也可以是偶数序),2层保存了1层奇数序的节点。理想情况下层数(不包含0层)和元素数量是2的指数关系,即为了最理想的实现二分查找,
2020-08-09 16:39:44
196
原创 redis源码学习--数据结构:字典设计和实现
redis的字典定义在dict.h,使用hash来实现,所以需要先了解hash的基础知识。一般hash是用数组实现,根据key计算出数组下标存放value,有可能多个key值会对于一个索引,即key产生冲突,redis使用链地址法解决,即索引下存放的是value的链表。数组使用的数量和申请大小的比值称为负载因子,负载因子越大,表示key产生冲突的概率就越大,需要扩充数组;负载因子越小,表示不有内存被浪费,可以缩小数组。以上调整数组大小称为rehash。rehash前后由key计算索引的公式是不一样的。我
2020-07-12 20:51:50
165
原创 redis源码学习--数据结构:ziplist实现
本文接上篇"redis源码学习–数据结构:ziplist设计"https://blog.youkuaiyun.com/dmgy614262711/article/details/105879969一下是entry定义的数据结构/* We use this function to receive information about a ziplist entry. * Note that this is...
2020-06-07 21:53:56
201
原创 redis源码学习--数据结构:ziplist设计
redis源码学习–数据结构:ziplistziplist的重点在于压缩,为了高效使用内存,需要对数据结构进行压缩。链表结构理论上需要有额外的空间存储指针字段,所以ziplist实际上用的是连续内存。下面介绍ziplist的结构字段解释zlbytes占4个字节,表示整块结构的长度,包含自己zltail占4个字节,从头到最后一个元素的偏移地址,可以方便的从后遍历...
2020-05-01 21:18:53
290
1
原创 redis源码学习--数据结构:链表
redis源码学习–数据结构之链表@TOCredis中的链表介绍redis中使用的是双向链表,定义在目录src\adlist.c中,结构体定义在同名的头文件中。src\adlist.c封装了链表的API新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作...
2020-05-01 11:35:07
190
1
原创 最短路径问题以及包含过路费的问题--动态规划式的解法
求最短路径的dijkstra算法(详细算法原理自行百度,简单从动态规划角度思考),可以看成是一个动态规划的方法。 动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。 dijkstra虽然没有递推公式,但是满足将大问题分解成子问题,当前问题的解由上一次子问题的解推出。算法的思想是 使用了三个一维数组,分别是visit[k],pre_node[k],sh
2017-03-05 16:56:49
1013
原创 算法导论--动态规划
自我感觉对于动态规划还比较不熟悉,所以专门看了《算法导论》里面第15章,动态规划这一章。对其中的钢条切割、矩阵链乘法、最长公共子序列和最优搜索二叉树这些问题有一定了解。 动态规划是一种解决最优化问题的方法,而不是一种算法。通常需要解决的这些问题有很多解,这些解都有一个值,找出值最大(最小)的解,通常动态规划可以找出最优的值,以及其中一个最优解,无法找出所有的最优解。 动态规划方法求解问题的四个步
2017-03-01 18:45:15
305
原创 最短路径和最少花费问题--动态规划
最短路径和最少花费问题–动态规划求最短路径的dijkstra算法,可以看成是一个动态规划的方法。 动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。 dijkstra虽然没有递推公式,但是满足将大问题分解成子问题,当前问题的解由上一次子问题的解推出。算法的思想是 使用了三个一维数组,分别是visit[k],pre_node[k],short[k]来分
2017-02-23 18:28:24
5169
原创 数据结构(C语言):链表,约瑟夫问题
开始学习数据结构,把写过的代码发上来,希望可以给有需要的人一个参考。//本代码由 大漠孤烟 整理编写,并验证通过//求解约瑟夫问题,涉及到链表节点的生成,节点的插入和删除,对理解链表非常有好处//N个节点围城一圈,从第一个节点开始计数(1),每数到第M的数删除,看最后留下那个数#include#include#includetypedef struct LNode{ int
2016-01-19 13:45:51
1106
STM32使用tim2 4个通道输出互补SPWM 幅度最大
2014-03-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人