
C/C++
文章平均质量分 80
C与C++的用法研究与使用样例
春夜喜雨
好雨知时节.当春乃发生.
展开
-
避免误用strncmp与memcmp,strcpy与memcpy
(Owed by: 春夜喜雨 http://blog.youkuaiyun.com/chunyexiyu)注:使用说明部分参考豆包ai。原创 2025-04-08 20:34:14 · 317 阅读 · 0 评论 -
leveldb的DBSequence从哪里来,到哪里去?
leveldb数据库的DBSequence从哪里来,到哪里去?大概的情形是,leveldb的记录初始DBSequence为0,随着记录的增加,记录sequence不断随着增加,并持久化到文件中。细节在哪呢?原创 2025-01-03 20:49:04 · 672 阅读 · 0 评论 -
va_list/va_start/va_end/va_arg可变参数的使用
做日志打印或其它可变参数处理时,通常我们会想到使用va_list/va_start/va_end做可变参数的收集和处理。使用这种方式处理可变参数比较通用,同时适用于c与c++中。原创 2025-02-01 20:45:31 · 996 阅读 · 0 评论 -
Linux下C++代码实现字符集转换
linux下字符集转化,通常我们采用的路径有两个:wcstombs/mbstowcs与直接使用iconv。原创 2024-12-10 21:09:58 · 947 阅读 · 0 评论 -
浮点数二进制制科学计数法理解
对于浮点类型,我们知道其采用科学计数法,准确来说应该是二进制科学计数法。为什么准确说是是二进制科学计数法,而不是称为科学计数法?原创 2024-10-17 22:32:36 · 784 阅读 · 0 评论 -
数据类型转换与转义reinterpret的差异
在C和C++语言中,类型转换与转义是有点像的,有时可能被误解,这块需要仔细辨别。原创 2024-10-16 21:08:43 · 370 阅读 · 0 评论 -
leveldb前缀匹配查找Seek
最近偶然发现了,leveldb前缀匹配查找的功能。之前没有从这个角度去想过Seek方法,尝试使用之后,效率还是很好的。时不我待,下面也谈一谈该技术点,以及这个技术点的背后支持,leveldb为此做的实现。原创 2024-09-24 21:30:28 · 699 阅读 · 0 评论 -
实现一个自定义STL类模版DataStorage
尝试自己来实现一个模版类,来满足一些常用语法、常用接口的使用。综合std::vector与std::array特点,提供一个由这两个类对象组合出来的内存结构类模版,该模版类有一个固定内存块和一个动态内存块,对外提供stl的相关访问方法。原创 2024-08-19 22:01:02 · 838 阅读 · 0 评论 -
堆溢出崩溃vs栈溢出崩溃的内存越界对比分析
最近碰到了软件运行的两个崩溃问题,非常典型,一个堆溢出越界问题heap overflow,一个栈溢出越界问题statck overflow。原创 2024-07-19 19:25:57 · 1386 阅读 · 0 评论 -
leveldb的cache实现研究
近来研究leveldb的数据cache,又发现了一些新的细节,发现的这些细节还是很有趣的,一起来看看。原创 2024-06-07 20:57:06 · 805 阅读 · 0 评论 -
linux下coredump问题的定位分析方法
linux下core问题的定位,除了使用常规的gdb分析core文件与重现问题之外,我们还可以关注一些点:第一关注运行日志,第二关注运行限制和系统信息,第三关注系统历史运行信息,另外还有一些常见问题项等。原创 2024-04-10 20:11:45 · 1232 阅读 · 0 评论 -
CMakeLists中Set编译器要放在project设定之前
前一段时间做Linux下的编译,遇到一个奇怪的问题,明明设定了使用C Compiler, CXX Copmiler,但是cmake时还是报错,找了clang++编译器,觉得很奇怪。原创 2023-10-13 10:12:12 · 408 阅读 · 0 评论 -
sqlite使用样例与utf编码
关于如何来使用sqlite,写了一些简单的使用样例。数据库使用样例,无外乎几种,打开数据库,创建表,插入数据,查询数据,DDL与DML几种操作。另外由于sqlite的接口限制约束,要求字符串使用utf编码格式,所以也会涉及编码使用的部分知识。原创 2023-07-15 20:44:56 · 1583 阅读 · 0 评论 -
leveldb的Version相关类分析
在leveldb中,Version相关类是其中比较复杂的几个类了,主要包括Version、VersionEdit、VersionSet几个类。原创 2023-06-27 21:13:48 · 230 阅读 · 0 评论 -
堆排序与大顶堆
有一天,别人问到你,你了解 堆排序吗?或者 你对大顶堆了解吗?之前问我的话,我是不太了解的,不过现在了解多了。也期望通过下文,你也能对它了解起来。原创 2023-05-17 22:53:44 · 587 阅读 · 0 评论 -
weak_ptr特点
weak_ptr也是一个很有意思的智能指针,感觉它不太像是一个智能指针,更像是一个shared_ptr的经纪人原创 2023-05-04 20:34:05 · 594 阅读 · 0 评论 -
虚函数继承与虚函数表-汇编码分析
虚函数继承是如何继承的呢?我们听说的虚函数表是怎么回事?虚函数表指针是如何变化与赋值呢?虚函数表存储的内容格式是什么样子的?原创 2023-04-09 16:51:50 · 764 阅读 · 0 评论 -
解读CRC校验计算
CRC校验的思路是,把一个串作为一个长的数值,附加某段校验码后,形成一个更长的数值串,对该数值串求余运算时能够整除;从而来校验内容未被篡改;原创 2023-02-27 21:36:13 · 1700 阅读 · 0 评论 -
读写锁RWLock简单实现研究
读写锁在服务端程序开发时,用的还是比较广泛的一种锁,比较适合用于多读少写的场景。多读少写场景,可以减少加锁时间;因为能够对大多数的读场景减少加锁时间,也一定程度减少多线程程序的编写难度。原创 2023-01-15 21:19:19 · 552 阅读 · 0 评论 -
shared_ptr代码研究
shared_ptr被使用的很广泛,许多经典库使用share_ptr作为实现函数的接口类型使用。出share_ptr构建时:会构建出两个指针,一个用来指向维护的元素,一个用来指向元素的计数管理类对象。原创 2023-01-05 20:43:19 · 921 阅读 · 0 评论 -
安装使用clang-format
clang-format用于格式化代码,并能够指定采用的格式名称,例如google,microsoft,GNU代码样式格式等。原创 2022-12-18 17:58:45 · 2521 阅读 · 0 评论 -
多线程下类对象的服务承诺探讨
多线程下,哪些需要**类本身**处理资源共享冲突,哪些需要**类调用**方保证共享冲突。**类对象** 与 **调用者** 各自应该有哪些服务承诺?原创 2022-07-28 21:10:03 · 220 阅读 · 0 评论 -
linux下编译生成库函数的符号查看
不同于window下,在Linux下:编译.o文件、静态库.a文件、动态库.so文件、生成的可执行程序,都可以方便的查看函数符号。原创 2022-07-19 22:58:45 · 1239 阅读 · 0 评论 -
pragma-pack语法与使用
pragma-pack通常是我们做涉及IO程序,或涉及通信程序时,会对结构体或类做的设定。通常我们考虑着网络通信时或io上尽可能节省字节长度。有时,也可能考虑cpu特点或考虑计算运行效率,对对齐方式做指定。.........原创 2022-07-02 22:30:30 · 783 阅读 · 0 评论 -
std::make_shared特点
std::make_shared的使用,从堆上内存分配的角度来看,对比直接使用std::shared_ptr构造,可以减少一次堆内存的申请。原创 2022-06-19 10:59:14 · 5210 阅读 · 0 评论 -
leveldb简单使用样例
几个leveldb的简单使用样例,包含写数据、查数据、遍历数据,c++语言的,供参考。原创 2022-06-07 22:13:57 · 965 阅读 · 0 评论 -
类构造函数与虚函数调用-汇编代码分析
C++中构造函数、析构函数、虚函数在调用时,汇编码是如何处理的,和我们平常理解上有没有什么不同?对于类的实例,在进行函数调用时,会传入this指针吗?通过哪种方式传入的?虚函数呢?虚函数表在哪呢,虚函数指针又如何初始化的呢?...原创 2022-05-23 00:11:15 · 563 阅读 · 0 评论 -
右值引用调用-汇编码分析
右值引用是在C++11时引入的一个重要的功能,并在stl库中提供了右值引用的函数,便于做值的转移。下面通过汇编码分析,来进一步理解右值引用从汇编角度来看,它的特点是有什么。原创 2022-05-21 10:58:36 · 486 阅读 · 0 评论 -
std::vector内存申请增长率
vector中的数组长度是如何增长的,倍增方式吗?初始vector内部带有空间吗,还是初始空间大小为0呢?从vector模板库实现中找一找,可以找到相关的线索。原创 2022-05-09 21:08:51 · 750 阅读 · 0 评论 -
std::vector内存清理
vector析构的时候,才会把申请的堆内存释放掉。但有时,我们希望早点清理掉它,而不是等到vector自动析构的时候,这时候我们就需要对它进行特殊处理了。原创 2022-05-09 20:43:41 · 3000 阅读 · 0 评论 -
数字类型初始化-汇编码分析
整型1字节/2字节/4字节/8字节分别是怎么初始化的,汇编命令有区别码?浮点型是如何初始化的呢,用的什么样的汇编命令?bool类型如果初始化,按1个字节还是1比特初始化呢?原创 2022-04-29 19:13:25 · 1387 阅读 · 0 评论 -
加锁解锁性能
加锁解锁的性能是怎样的,成本有多高呢?是不是很高,付出的成本和哪些地方有关系呢?和使用的加锁方式有没有关系?原创 2022-04-17 11:34:41 · 1398 阅读 · 0 评论 -
线程可重入锁实现研究
线程可重入锁,通常用在某些资源加锁位置比较多,为了防止线程内重复加锁异常,使用的一种锁。可重入锁在windows下、linux下底层实现并不相同,下面探讨线程可重入锁的实现。原创 2022-04-17 10:32:13 · 666 阅读 · 0 评论 -
探讨conditon_variable的使用
std::conditon_variable的使用还是非常有趣的,它本身是和mutex一样,每个条件变量都是一种系统下唯一标识的资源。下面主要探讨为什么它的block等待需要一个std::unqiue_lock<std::mutex>做配合?原创 2022-04-05 19:59:02 · 987 阅读 · 0 评论 -
简单读写锁实现研究
当我们想实现一个读写锁的时候,我们需要清楚的知道:读写锁有哪些功能特点?读写锁的局限性?读写锁实现后的使用效果是什么?原创 2022-03-19 17:27:08 · 531 阅读 · 0 评论 -
基类与实现类分离实践
基类与实现类分离,在google开源代码中有大量的使用,便于减少依赖,把类方法声明和实现分离。原创 2022-03-08 23:04:53 · 280 阅读 · 0 评论 -
进程间通信IPC-共享内存ShareMemory
作为本地进程间通信中非常高效的手段,共享内存是一个优点很明显,缺点也很明显的进程间数据传递的方式。核心优点:是通过地址映射直接共享访问内存,适合于大数据量的进程间传送。主要缺点:是没有进程间访问同步的约束,不解决进程间访问冲突,需要额外的同步机制来保证。原创 2022-03-04 00:03:11 · 1383 阅读 · 0 评论 -
函数中未初始化本地变量的初值研究
函数中,本地变量未初始化时,它的值存的是什么呢?随机值?固定值?前后函数之间有什么因果关系吗?原创 2022-02-24 23:08:39 · 1050 阅读 · 0 评论 -
进程间通信IPC-信号量Semaphore
信号量是一个很有趣的系统同步方式,在linux下和windows下都有支持。它像是为典型的生产者消费者问题应运而生的。原创 2022-02-17 23:04:48 · 854 阅读 · 0 评论 -
C与C++运算符优先级个人解读
没有想到,在写了许多年代码之后,对几个运算符优先级竟然没有记对。还好平时多用括号,要不代码该出许多问题了。但优先级还是要能分的清楚的,毕竟看代码的时候,会涉及到未用括号分割的情况。原创 2022-01-16 12:07:34 · 995 阅读 · 0 评论