- 博客(26)
- 收藏
- 关注
原创 C++内存泄漏/内存越界的各种情况,以及预防与排查
内存泄漏,是指在程序代码中动态申请的、堆上的内存 由于某种原因、在使用后没有被释放,进而造成内存的浪费。少部分的内存泄漏不会影响程序的正常运行,不过如果是持续的内存泄漏会耗光系统内存,最终会导致程序卡死甚至系统崩溃。为了避免系统崩溃,在无法申请到内存的时候,要果断调用exit()函数主动杀死进程,而不是试图挽救这个进程。内存越界是软件系统主要错误之一,其后果往往不可预料且非常严重。
2023-03-29 20:19:29
5174
1
原创 cmake使用详细教程(日常使用这一篇就足够了)
此时可以使用cmake中的函数存储这些源文件。只需要在CMakeLists.txt中添加所依赖的.cpp文件,编译步骤和上面相同。有时编译程序时想添加一些编译选项,如-Wall,-std=c++11等,可以使用。此时在当前目录新增两个依赖,并mian函数的执行需要依赖这两个文件。1、在官网下载cmake的安装包,这里我下载的是v3.26。4、此时已经安装完成,可以在shell中使用cmake命令。2、找到下载的sh文件,并使用bash来执行sh脚本。对于集中的头文件,CMake提供了一个很方便的函数。
2023-02-27 11:18:29
154055
21
原创 MySQL数据库的备份、恢复、导出、导入(bin log和mydump)
bin log不是通过回滚来恢复数据的,而是重新执行SQL语句来恢复的。1、先给数据库上锁,防止备份过程中数据库被修改。1、LOAD DATA INFILE 导入。3、数据库解锁(一定不能忘记解锁)同时生成txt文件和sql脚本。把查询内容导出内容到txt文件。3、给mysql用户赋予权限。1、先查看数据库是否可以导出。1、在shell中恢复。2、在mysql中恢复。2、重启mysql服务。
2023-02-26 15:05:25
6263
转载 MySQL数据库七种日志介绍
bin log是一种数据库Server层(和存储引擎无关),以二进制形式存储在磁盘中的逻辑日志。bin log记录了数据库所有的DDL和DML操作(不包括SELECT 和 SHOW)bin log也叫做归档日志,因为他不像redo log一样循环写擦除之前的记录,而是会一直记录日志。如果单个日志文件大小超过 max_binlog_size,就会创建新的文件继续写入。bin log日志的内容格式其实就是执行SQL命令的反向逻辑,(和undo log有点类似)。
2023-02-26 10:55:35
2380
原创 MySQL数据库多版本并发控制MVCC
MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC 是通过数据行的多个版本管理来实现数据库的 并发控制。这项技术使得在InnoDB的事务隔离级别下执行 一致性读 操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。组成:隐藏字段(rowId+trxId)+undolog+readview隐藏字段(rowId+trxId)
2023-02-20 23:07:22
455
原创 MySQL数据库锁详解
一、锁的分类一、按照粒度分类1、分类2、代码操作二、按照属性分类1、共享锁2、排他锁3、代码操作三、按照加锁方式分类1、隐式的自动加锁2、显示的加锁四、按照算法分类1、间隙锁2、临键锁3、记录锁五、按照模式分类1、悲观锁 2、乐观锁六、按照状态分类1、意向锁的解释1、意向共享锁2、意向排它锁二、锁的监控一、相关变量二、系统的表信息三、死锁一、如何处理死锁二、如何避免死锁
2023-02-20 17:12:23
1638
原创 MySQL数据库事务
所有的变更都必须先更新缓冲池中的数据,然后缓冲池中的脏页会以一定的频率被刷入磁盘(checkPoint 机制),通过缓冲池来优化 CPU 和磁盘之间的鸿沟,这样就可以保证整体的性能不会下降太快。这样做的好处是,即使数据库系统崩溃,数据库重启后也能找到没有更新到数据库系统中的重做日志,重新执行,从而使事务具有持久性。满足 预定的约束 的状态就叫做合法的状态。事务的隔离性是指一个事务的执行 不能被其他事务干扰,即一个事务内部的操作及使用的数据对 并发 的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
2023-02-20 14:30:49
836
原创 InnoDB数据存储结构
索引结构给我们提供了高效的索引方式,不过索引信息以及数据记录都是保存在文件上的,确切说是存储在页结构中。另一方面,索引是在存储引擎中实现的,MySQL服务器上的 存储引负责对表中数据的读取和写入工作。不同存储引擎中 存放的格式一般是不同的,甚至有的存储引擎比如Memory都不用磁盘来存储数据由于InnoDB 是MySQL的默认存储引擎。
2023-02-17 15:57:40
244
原创 一文了解MySQL索引的全部知识点
官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。
2023-02-17 15:33:01
408
原创 通过GDK8观察ARM框架下的中断向量表
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。以上是中断在百度百科中些较为浅显的解释,中断实际上是操作系统中较为重要的一种概念及机制,关于中断的一些详细的说明可以在由张银奎老师主讲的《在调试器下理解计算系统》中观看到(视频在nano code中;Nano Code下载上面提到“转入处理新情况的程序”,那么中断后,该如何确定这个新程序呢?
2023-01-11 18:26:09
963
原创 GDK8——强大的Linux内核调试工具
内核(Kernel)总是那么捉摸不透,而且有时也会出BUG,这时我们也应该对内核进行调试,但内核不像软件:内核调试很艰难,内核错误往往会导致系统宕机,很难保留出错时的现场而且任何对内核空间的访问和修改都可能引发更多错误。同时,市面上的调试工具(例如WinDbg、KD、CDB等)也不能很好的解决这些问题。机缘巧合之下,发现了一个非常强大的内核调试工具:GDK8(Web:),
2023-01-06 21:42:36
1738
2
原创 使用挥码枪连接GDK8进行内核调试
使用GDK8进行开发和调试时,远程调试和内核调试经常使用,本问简单介绍一下如何使用挥码枪连接GDK8进行内核调试。
2023-01-04 17:59:39
495
1
原创 使用GDK3开发魔法键盘心得
GDK3(GEDU Development Kit 3)是格蠹科技旗下基于ARM Cortex-M3 SoC设计的开发板,CPU框架是ARMv7-M。搭配公司其他相关软硬件工具,我们可以使用它来学习ARM和嵌入式,产品体积小,功耗低,且功能非常强大。
2023-01-04 13:44:34
362
原创 基于线程池+Epoll(IO多路复用)的高并发服务器(附C++源码)
简介:这是一个基于线程池+Epoll的IO多路复用、非阻塞IO技术,的高并发服务器框架。称它为框架是因为服务器功能非常简单且无意义,使用时应该把这个功能替换掉。但它可以直接拿来使用,很方便,所以也算半个项目。服务器的默认功能:客户端输入什么内容,服务器就返回什么内容。后续想实现什么功能,修改功能函数就可以。语言标准:C++11。
2022-11-28 02:59:12
5683
5
原创 C过渡C++基础(较详细)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言C语言想过渡C++,不想重新学习但又不想囫囵吞枣。这是本人的学习笔记提示:以下是本篇文章正文内容,下面案例可供参考一、C语言和C++的区别C++语言是C语言的扩展和增强,由原来的面向过程编程转变成面向对象、通用算法(泛型编程)由于C++是C语言的扩展,所以C语言程序也是C++程序,原有的.c 程序可
2021-11-05 23:25:34
1004
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人