
C
文章平均质量分 82
xy_kok
这个作者很懒,什么都没留下…
展开
-
redis源码浅见之adlist
redis源码浅见之adlistadlist是redis项目封装的一个链表操作的库,其官方解释为A generic doubly linked list implementation,实际是组装了一个带头节点的双向非循环链表头,节点自持链表首尾两个数据节点,依次达到快速操作的目的。源码链接如下:adlist.hadlist.c难点:什么是链表链表的基本操作(指针操作)亮点:是listIter这个struct的封装和实现,它封装了链表的操作,如此在了解链表的基础知识后,可以很快入手adli原创 2020-06-11 21:13:01 · 410 阅读 · 0 评论 -
redis源码浅见之sds
sds是redis项目封装一个基于字符串操作的库,其官方解释为:"SDSLib 2.0 -- A C dynamic strings library"。官方下载源码后上传至码云Redis,头文件和源文件连接如下:sds.hsds.c其想法是在保留C语言对字符串操作对同时,还实现了内存管理,节省了使用成本。实现原理:变长struct。typedef char *sds;struct __attribute__ ((__packed__)) sdshdr8 { uint8_.原创 2020-06-03 11:24:40 · 612 阅读 · 0 评论 -
Bus error: 10
最近写一个小程序,设计的类比较多,为了编译方便专门为源码和测试代码编写了Makefile。 调试过程中,突然出现“Bus error: 10”的错误,让人措不及防,为什么会出现这种奇观的问题呢? 网上查了很多几个帖子,基本一致认为是地址对齐的问题,大意为:int型数据的起始地址必须为4的倍数,否则会引起上述提到的总线错误。本着这个思想,查找了半天也没找到地址不对齐的地方。...原创 2019-02-26 11:44:49 · 6769 阅读 · 0 评论 -
H.264裸流文件中获取每一帧数据
测试解码器性能时,最常用的无非是向解码器中推送码流。 之前封装了一个avc的解码器,想做一个测试,读取H.264裸流文件将码流定期定时推送到解码器。 测试其实很简单: 1.了解H.264裸流文件的构成 2.解析H.264裸流文件 3.提取H.264码流调用接口推送数据 1. 了解H.264逻辑文件 根据H.264协议,a...原创 2018-07-27 15:54:01 · 15582 阅读 · 6 评论 -
vs2015使用MinGW编译的动态库
工作过程中经常会遇到使用其他开源项目的情况,有些开源项目有vs工程,比如opus,可以直接编译出vs可识别的动态库或静态库,但有些开源项目则没有,此时想要做的就是利用该源代码编译一个或多个库来使用。MinGw完全可以胜任这些工作,它可以安装autoconf、automake等工具,用来编码源码很方便,折腾半天库终于编译出来了,MinGW下测试也木有问题,但是vs不识别,不识别,不识别。。。原创 2017-11-04 13:48:05 · 9397 阅读 · 0 评论 -
拆分264码流
当从avc编码器拿到一帧数据时,有时会考虑按NALU头进行拆分,示例代码如下:P帧和B帧只有一个NALU头,所以不再需要拆分,主要是I帧,一般包含7,8,6,5四部分。/* find the size of a frame. * @data the memory of avc bit stream, this should be start with [00 00 00 01].原创 2017-10-18 18:55:27 · 380 阅读 · 0 评论 -
C/C++ 下如何判断空指针
今天在写C++代码,遇到一个很奇怪的问题,在Android JNI下判断一个指针是否为空,但是发现 (NULL == ptr )或者 (nullptr== ptr )表达式均为真,然而ptr是刚new出来的,也有地址值。这就很让人费解了,不信邪,写了这么多年的代码了,这种代码怎么看怎么没问题,同样的代码到x86环境下跑一次,却得到了我想要的结果,真是让人凌乱啊。。。最后只能祭出了我原创 2017-07-04 17:50:10 · 28398 阅读 · 4 评论 -
C的旅程系列之第一个C程序
前一章提到了如何开始学习C语言,这一章将在Linux环境下编写第一个C语言程序,我使用的Linux系统是Ubuntu14.04. 在编写程序之前,首先要确定保证你对Linux有基本的了解,比如如何打开终端,目录路径(相对路径,绝对路径),一些基本的命令(ls, cd, mkdir, touch, mv, cp,man)。 随便找个文本编辑器就可以写程序,Linux系统自带的ge原创 2017-06-26 18:02:10 · 337 阅读 · 0 评论 -
Linux下运行时指定动态库
开发程序的过程中,经常会用到一些动态库,但是动态库是无法编译到程序中的,所以安装程序时可能就需要将动态库放到默认的路径下/usr/lib或者/usr/local/lib/ 下等目录,否则,在运行程序时,就会有类似“libxxx.so找不到”的提示。 那么如果没有权限将指定的库拷贝到系统目录下呢? 这时就会用到一个环境变量LD_LIBRARY_PATH,通过如下cmd执行即可:$ e原创 2017-06-20 11:40:51 · 4607 阅读 · 0 评论 -
C的旅程系列之如何开始
C语言的发展史就不再赘述了,这个对学习C语言的帮助不算大。 不管什么语言没落了,C没落不了,首先他是基础语言之一,再往下也就只有汇编语言了,其次它有其他语言无法取代的优势。1. 运行速度快,比它快的只有汇编语言和机械语言了;2.可直接访问物理地址,这是底层编程的福音;3.语法相对简洁; 不管什么语言,都有各自的优势与劣势,尤其是脚本语言的出现,使得越来越多的人更喜原创 2017-06-12 21:31:30 · 355 阅读 · 0 评论