- 博客(76)
- 资源 (4)
- 收藏
- 关注
原创 C/C++ 程序是如何执行的,.h文件 .c文件之间的执行关系
众所周知——我们在学习的时候,课本上是这样写的,一个程序的执行需要四步:::源文件 经过预处理阶段->编译阶段->汇编阶段->链接阶段->可执行下面以一个平凡的例子,来描述自己的疑惑和所学。#include <stdio.h>int main(){ printf("hello"); return 0;}1、预处理阶段。预处理器根据以字符 # 开头的命令,修改原始的C程序。例如,hello.c 的第一行 #include <st
2021-01-02 19:02:26 3173
转载 中断、信号、系统调用
对于每个系统调用都有一个系统调用号,在触发中断之前,会将系统调用号放入到一个固定的寄存器,中断处理程序会读取该寄存器的值,然后决定执行哪个系统调用的代码。,比如Linux某网卡接收了一个数据包,此时会触发一个硬中断,由于处理数据包的过程比较耗时,而硬中断资源又非常宝贵,如果占着硬中断函数不返回,会影响到其他硬中断的相应速度,比如点击鼠标、按下键盘等。CPU收到一个中断号n后,会去中断向量表中寻找第n个中断描述符,从中断描述符中找到中断处理程序的地址,然后跳过去执行。......
2022-07-25 22:17:50 3502
原创 Visual Studio 如何查看C++内存分布
msvc 分析内存工具 cl ./main.cpp -d1reportAllClassLayout
2022-07-22 19:02:08 2078
原创 cmake 基本使用过程
cmake 的使用。aux_source_directory( ) 与set( target.cpp)的区别,include_directories(${PROJECT_SOURCE_DIR}/include) 与target_include_directories(sum11 PRIVATE ${PROJECT_SOURCE_DIR}/include)
2022-06-29 22:29:02 788
原创 常用关键字:#define,const,typedef,using,inline
常用关键字:#define,const,typedef,using,inline
2022-06-13 11:29:41 189
原创 详解Linux下TCP连接,未写完
一、服务器端最大TCP连接数二、客户端可以发起的连接数。三、TCP连接时,滑动窗口问题四、TCP三次握手、四次挥手五、TCP与UDP的区别
2022-06-01 23:23:03 1277 1
原创 C++ 堆/栈区别,new的用法,以及与malloc的区别
C++ 堆栈的区别、new/delete malloc/free 的区别与使用,等等
2022-05-31 22:40:48 1208
转载 进程间通信方式(管道、消息队列、内存映射区、共享内存等)
进程间通信 (Inter-Process Communication, 简写为 IPC) 是两个进程之间进行信息交流的一种机制, 不仅仅会发生在同一主机的两个进程之间, 也可以发生在不同主机的两个进程之间,。在一台主机上,每个进程的用户地址空间都是独立的,一般而言是不能互相访问的,但内核空间是每个进程都共享的,所以进程之间要通信必须通过内核。Linux内核提供了很多通信方式:管道、消息队列、内存映射区、共享内存、套接字。套接字主要应用于跨网络不同主机间的通信(也可以同一主机)。1、管道与消息队列
2022-05-28 16:21:16 1180
原创 C++ 智能指针
裸指针占用内存小,十分强大。但是在动态内存的使用过程中,容易产生以下问题。忘记释放内存,造成内存泄漏 在尚有指针引用内存的情况下,就释放了它,产生引用非法内存的指针。为了更容易安全地使用动态内存,C++11提供了两种智能指针,来管理动态内存对象。shared_ptr 允许多个指针指向同一个对象;unique_ptr 则独占所指向的对象。还定义了一个名为weak_ptr 的伴随类,是一种弱引用,指向share_ptr 所管理的对象。 都定义在 memory 头文件中。...
2022-04-14 21:42:05 586
原创 嵌套模板,友元函数与模板类
1、友元函数与模板类常见类型模板函数中,实现友元函数,大概有下面几种分类。不需要模板参数的非模板函数 需要模板参数的非模板函数 需要模板参数的模板函数,使用类的模板参数来特化 需要模板参数的模板函数,使用自己的模板参数。(可以有多个模板参数)template<typename T>class A;template<typename T>void func3(const A<T>& obj);template<typename
2022-03-11 22:19:21 1174
原创 new、delete与malloc、free的区别,内在实现。
new、delete与malloc、free的区别;以及new与new[],delete,delete[]的区别。
2022-03-05 20:14:15 1302
原创 C++ 实现 String 类,所考虑的问题
1、string 对象中,因为需要在堆中开辟新的内存,所以用编译器默认的拷贝构造函数和复制构造函数,会造成问题,所以需要重写为深拷贝。2、在拷贝构造函数中,为什么可以访问一个对象的私有属性。 即为什么可以访问str.pstrMyString::MyString(const MyString& str) { int len = shtrlen(str.pstr) + 1; pstr = new char[len]; strcpy(pstr, str);}理由..
2022-03-03 09:34:16 192
原创 MySQL四种隔离级别与并发存在的问题。
1、事务的四个特性事务是一个或多个SQL语句组成的一个不可分割的单元。事务中的一组SQL语句,要么全部成功,要么全部失败。四个特性 ACID原子性 atomic一致性 consistency隔离性 isolation 针对数据库中的并发来说,隔离性越好,并发性越低。根据的是innodb的锁机制持久性 durability redo日志,保证数据的持久性,极端情况 commit后,服务器宕机,数据还没有持久化到磁盘,就需要依靠redo日志了。ACD依靠的是redo、undo日...
2022-01-07 12:02:32 1370
原创 0、VSCode如何远程连接Linux,密钥的使用
VSCode在远程连接Linux时,怎么连接,是否需要密钥,以下进行记录讲解。1、VSCode远程连接步骤1、安装插件打开VSCode后,使用快捷键 Ctrl+Shift+X 或者使用如下图标,在里面搜索 ssh,进行安装2、配置远程服务器安装后,会出现左下角那个按钮,点击会出现右边的选项,在 设置中进行远程服务器的配置。3、配置 config 的文件选择第一行,出现如下信息,按照格式进行填写Host:自定义远程连接的名字Hostname: 服务器IP地址.
2021-12-26 20:14:15 3642
原创 1、muduo网络库 ---- Linux平台下muduo编译安装
muduo库的介绍:一个基于reactor反应堆模型的多线程C++网络库。作者是陈硕大神。muduo库是基于 boost 库开发的,所以需要在 Linux 平台上首先安装 boost 库。1、boost 库安装第一种方法是编译源码安装,可以了解一下,不过比较麻烦:1、准备好boost压缩包,我这里是boost_1_65_0.tar.gz 2、解压 tar -zxvf boost_1_65_0.tar.gz /usr/local 3、进入/usr/local/boost_1_65_0目录.
2021-12-22 18:40:21 3697 2
原创 STL中,函数对象
1、对于回调机制的理解函数B要完成一个功能,但是自己无法完成一定功能,需要借助函数A来完成,也就是回调函数。注意区分普通函数的使用和回调函数的使用。2、基于函数指针的回调函数typedef void (*Callback) (char * str);void ab(char* str) { cout << str << endl; return ;}void ba(Callback call, char* str) { ab(str);
2021-11-29 11:47:56 467
原创 MySQL 中内连接、外连接、交叉连接的区别
1、外连接外连接可以分为左外连接和右外连接。1、左外连接取左边的表的全部,右边的表按条件,符合的显示,不符合则显示null2、右外连接
2021-06-19 21:36:25 578
原创 g++基本用法 objdump 查看输出obj文件
学习C和C++的同学应该都知道,gcc是一款跨平台的C/C++编译器,可以在Linux/Windows平台下使用,具有十分强大的功能,结构也十分灵活,并且可以通过不同的前端模块来支持各种语言,如Java、Fortran、Pascal、Modula-3和Ada的编译。许多有名的工程和库都是使用gcc进行编译的,如nginx,libevent等。今天我们重点介绍gcc组件中可以用来编译C++程序的g++组件的使用。g++可以在命令行使用,也可以通过配置IDE的编译环境来调用系统配置的g++环境,大家可以根据需要
2021-06-16 20:17:46 5226
转载 隔离级别 和 脏读,不可重复读,幻读
https://zhuanlan.zhihu.com/p/52677680从实例出发,搞懂高并发下的数据库事务隔离级别 (biancheng.net)
2021-06-07 18:44:37 84
原创 MySQL学习----数据库的基本语句操作
SQL 包含以下 4 部分:1)数据定义语言(Data Definition Language,DDL)用来创建或删除数据库以及表等对象:drop:删除数据库和表等对象 create:创建数据库和表等对象 alter:修改数据库和表等对象的结构2)数据操作语言(Data Manipulation Language,DML)用来变更表中的记录:select:查询表中的数据 insert:向表中插入新数据 updata:更新表中的数据 delete:删除表中的数据3)数据查询语言(Da
2021-05-19 20:25:21 149
原创 C++ class 和 struct 构造函数
1)、Class在 C++ 中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:不管是声明还是定义,函数名前面都不能出现返回值类型,即使是 void 也不允许;函数体中不能.
2021-05-19 12:24:50 3498
原创 数据结构,单链表及一些题目
数据结构中,一个常用的数据结构--链表。struct LNode { int val; LNode* next;}LNode, *Linklist;首先,了解一下
2021-05-18 21:39:18 315
原创 C++,STL,deque 常用函数介绍
C++ STL,常说的容器可以分为三大部分,序列式容器,关联式容器,容器适配器。这篇文章记录一下序列式容器中的 deque。1、deque 双端队列 直观效果deque 容器以模板类 deque<T>(T 为存储元素的类型)的形式在 <deque> 头文件中,并位于 std 命名空间中。因此,在使用该容器之前,代码中需要包含下面两行代码:#include <deque>using namespace std;//或者 std::deque和 ve
2021-05-15 16:42:06 522 1
原创 C++,STL,vector: size,capacity,resize,reserve,max_size
1、vector 内存增长模式vector是一种特殊的数组,因此其内存必然是连续的。它的连续是建立在不断地对内存的预分配上的,即不断地销毁当前,重新建立内存,效率有点低。vector 容器扩容的过程需要经历以下 3 步:(当 size == capacity 时候,如果要添加元素,就会扩充)完全弃用现有的内存空间,重新申请更大的内存空间; 将旧内存空间中的数据,按原有顺序移动到新的内存空间中; 最后将旧的内存空间释放。这也就解释了,为什么 vector 容器在进行扩容后,与其相关的指针、
2021-05-13 15:45:12 288
原创 C++,STL,queue 队列:FIFO 队列与单调队列的深挖与扩展
1、队列的基础知识和 stack 栈容器适配器不同,queue 容器适配器有 2 个开口,其中一个开口专门用来输入数据,另一个专门用来输出数据。如图所示:queue 容器适配器以模板类 queue<T,Container=deque<T>>(其中 T 为存储元素的类型,Container 表示底层容器的类型)的形式位于<queue>头文件中,并定义在 std 命名空间里。因此,在创建该容器之前,程序中应包含以下 2 行代码:#include <queu
2021-05-13 10:40:31 860
原创 相机标定----世界坐标系,相机坐标系,图像坐标系,像素坐标系的转换
1、坐标系介绍相机模型中,三维世界中的某一点 和 其对应的像素点是通过坐标系的转换得到的。这个过程中会涉及到四个坐标系,即世界坐标系、相机坐标系、图像坐标系、像素坐标系。下面将详细介绍四个坐标系的函已并且记录其的转换过程。图像中所涉及的四个坐标系及其含义:Ow - Xw - Yw - Zw :世界坐标系,单位为 m。Oc - Xc Yc Zc : 相机坐标系,光心为原点,单位为mo - x y : 图像坐标系,光心为原点,单位为mmu v :像素坐标系,原点为图像左上角,单位..
2021-05-12 18:58:55 3991 2
原创 C++函数对象与函数指针
在使用STL库中,我们使用 sort 函数,在// sort algorithm example#include <iostream> // std::cout#include <algorithm> // std::sort#include <vector> // std::vectorbool myfunction (int i,int j) { return (i<j); }struct myclass { b
2021-04-13 19:21:57 257
原创 C++ 测量程序执行时间的办法
利用库 <ctime>(time.h) 去计算#include <ctime>//clock_t是定义<ctime>为基本算术类型的别名的类型。int main(){ clock_t start = clock();//自己的程序 clock_t end = clock(); clock_t time = end - start;//此处计算的是执行相关的时期以来经过的时钟滴答数。//如果要换算成秒的话,可以这样计算
2021-04-08 20:09:57 138
原创 c++ unique() distance() 删除数组重复元素
问题引入:给定一个排好序的数组,删除重复元素,使每个元素至多出现一次。下面一个例子,不用返回数组,返回修改后的数组长度。输入:{1,2,3,3,4}输出:4, 为{1,2,3,4}如果是 {1,2,3,4,4,1}我们可以将 先排序,然后在进行此方法。解法1:双指针解法,设置一快一慢的指针,来解决此问题。class Solution {public: int removeDuplicates(vector<int>& nums) { in
2021-04-08 19:49:39 762
基于nsct的图像融合,
2020-09-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人