自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 GDB调试 多线程 进程 coredump

1、调试简单多线程学习:【Linux】gdb调试多线程与多进程GDB 调试多线程程序的总结gdb调试多进程与多线程生成程序 gcc -o env threadgdb1.c -lpthread -g#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <unistd.h>static int count = 0;void *pthread_fuc(void *ar

2020-10-28 20:53:14 1877

原创 strcpy、memcpy实现

char* strcpy1(char* dest, const char* src){ if(dest == NULL || src == NULL) return NULL; char* p = NULL; while(src != '\0') { *p = *src; ++p; ++src; } return p;}char* memcpy1(void* dest, const void* src, size_t len){ if(dest == NULL || s

2020-10-28 03:33:34 169

原创 内存泄漏检测 笔记

一、基于CRT的内存泄漏检测windows 下,C运行时库CRT(C Run-time Library),Standard C++ Library包含CRT。CRT将 malloc 和 free 函数映射到它们的调试版本,即 _malloc_dbg 和 _free_dbg,这两个函数将跟踪内存分配和释放。原理:Debug版本的 CRT定义了一套调试版本的内存分配函数(如_malloc_dbg)。当你包含了CRTDBG.h后,如果当前是Debug工程,且定义了_DEBUG宏,这时,malloc函数会被被映

2020-10-28 03:32:01 384

原创 智能指针 shared_ptr 简单实现代码

template<class T>class SmartPointer {public: SmartPointer(T* ptr) { m_ptr = ptr; m_count = new unsigned; *m_count = 1; } SmartPointer(SmartPointer<T> &sptr); SmartPointer& operator=(SmartPointer<T> &sptr) { if

2020-10-27 18:44:48 165

转载 红黑树和AVL树(平衡二叉树)区别

一,AVL树(平衡二叉树)(1)简介AVL树是带有平衡条件的二叉查找树,一般是用平衡因子差值判断是否平衡并通过旋转来实现平衡,左右子树树高不超过1,和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差的绝对值不超过1)。不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而旋转是非常耗时的,由此我们可以知道AVL树适合用于插入与删除次数比较少,但查找多的情况(2)局限性由于维护这种高度平衡所付出的代价比从中获得的效率收益还大,故而实际的应用不

2020-10-27 13:30:46 158

原创 STL(容器底层,hashtable、Traits)

STL源码剖析之哈希表 hashtable:链接C++ 学习笔记:STL 容器一些底层机制:链接Traits编程技法: 链接Traits特性 主要是有关迭代器操作的函数 能返回迭代器实际指向的对象类型。1、迭代器是一种行为类似指针的对象, vector的迭代器就是原生指针,许多容器(list,deque)的迭代器是模拟指针但实际上它不是真正意义上的指针,它是一个类里面封装了原生指针。迭代器类型萃取模板template<class T>class My_iterator{publ

2020-10-27 01:55:16 123

转载 C/C++ 类型安全的

什么是类型安全?类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。“类型安全”常被用来形容编程语言,其根据在于该门编程语言是否提供保障类型安全的机制;有的时候也用“类型安全”形容某个程序,判别的标准在于该程序是否隐含类型错误。类型安全的编程语言与类型安全的程序之间,没有必然联系。好的程序员可以使用类型不那么安全的语言写出类型相当安全的程序,相反的,差一点儿的程序员可能使用类型相当安全的语言写出类型不太安全的程序。绝对类型安全的编程语言暂时还没有。C语言的类型安全C

2020-10-26 20:38:12 239

转载 为什么只有指针或引用能实现多态

转载: 浅谈为什么只有指针能够完成多态及动态转型的一个误区c++多态由一个函数地址数组Vtable和一个指向Vtable的指针vptr实现。具体来说,类拥有自己的vtable,类的vtable在编译时刻完成。每个对象有自己的vptr指针,该指针初始化时指向对象所实现的类的vtable。关于向上转型的误区:通常对于向上转型的理解是这样的,当子类对象向上转型(允许隐式)成父类对象时,实际上只是将子类对象暂时看做父类对象,内部的数据并未改变。对于没有虚函数的对象,这句话是正确的,但是,当引入虚函数后,

2020-10-26 17:45:23 654

原创 虚函数(实现原理、内存位置、初始化时间)

一、实现原理参考详细 : 虚函数实现原理C++的标准规格说明书中说到,编译器必需要保证虚函数表的指针存在于对象实例中最前面的位置(这是为了保证正确取到虚函数的偏移量)1)虚函数按照其声明顺序放于表中。2)父类的虚函数在子类的虚函数前面。3) 每个父类都有自己的虚表。4) 子类的成员函数被放到了第一个父类的表中。(所谓的第一个父类是按照声明顺序来判断的)安全性一、通过父类型的指针访问子类自己的虚函数class A{public: virtual void fuc1(){};};

2020-10-26 17:04:07 1162

原创 C++中类的数据成员和成员函数内存分布

一、数据大小与对齐1、空类型class Base1{};void main(){ cout<<sizeof(Base1)<<endl; // 打印 1}编译器会安插一个char到空类中。这样这个类定义出来的两个对象在内存中就是独一无二的。2、非空类型#pargma pck (n) ,n为对齐模数。//pargma pck (4) class myclass{ char m_char; //占1个字节 ,偏移量 = 0 char m_char1

2020-10-26 15:37:52 718

原创 C ++ 面向对象特性 (多态)

一、面向对象的三大特性 封装、继承、多态二、多态的实现 一个接口,多种实现;#include <iostream>using namespace std;class Base{public: void fuc(); virtual void fuc1(int x, int y = 10);private: int a;};void Base::fuc() { cout<<"base fuc"<<endl;}void Base::fuc1

2020-10-26 01:53:35 139

原创 sphinx源码学习(4) Hash表和插入顺序链表

sphinx 定义了一个Hash表类模板。维持了一个Hash数组和链表,和一个插入顺序链表。每个struct HashEntry_t都代表一个元素(key, value),使用公式HASHFUNC(key)计算uHash值,并将HashEntry指针放入m_dHash数组中,对应位置m_dHash [ uHash ];如果m_dHash [ uHash ] 已经存在,则放入m_dHash [ uHash ]对应的链表中,可通过m_pNextByHash找到对应位置;m_pPrevByOrder, m_

2020-06-26 00:56:19 117

原创 sphinx 源码学习(1) 子类调用父类的拷贝构造函数(private父类拷贝等构造函数)

sphinx 源码学习1、当Child没有定义拷贝构造函数,当调用Child默认拷贝构造函数时,会先调用Base拷贝构造函数2、当Child定义有拷贝构造函数,当调用Child拷贝构造函数时,会先调用Base构造函数 (可显示调用Base拷贝构造函数)下面代码: Base类的拷贝构造函数设置为private或delete,调用Child类会调用Base类的拷贝构造函数?1、子类默认拷贝构造函数class CSphMutex{public: CSphMutex(): m_bInitial

2020-06-24 20:32:46 360

原创 C++ class 拷贝、赋值构造简单代码

#include <string.h>#include <iostream>using namespace std;class MyClass{public: MyClass(int value = 0); MyClass(const MyClass &a); MyClass& operator=(const MyClass &a); ~MyClass() { cout<<"d

2020-06-06 20:03:20 1073

原创 C/C++头文件 全局变量(或static)

1、在头文件中使用static定义变量意味着什么?使用非静态全局变量是否也行?2、头文件中的 #ifndef/#define/#endif 防止该头文件被重复引用,重复引用?其内是否也可以定义全局变量?1、myfile.h定义静态全局变量a, source.c和main.c分别引用myfile.h//******文件myfile.hstatic int a = 50;//int b = 100;//******文件source.hvoid printfStatic();//******文

2020-06-01 22:37:42 2969 1

原创 5 个常用 Python 标准库

sys 获取程序参数、版本信息、模块搜索路径、标准输入输出等os 操作文件,环境变量, os.patch路径信息处理1、sys>>> dir(sys)['__displayhook__', '__doc__', '__excepthook__', '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__', '__stderr__', '__stdin__', '__stdout__', '_

2020-05-26 23:52:04 3504

原创 Python copy()和deepcopy()

1、‘=’>>> a=(1,2)>>> n1=1>>> n2=1>>> n1 is n2True>>> s1='abc'>>> s2='abc'>>>> s1 is s2True>>> l1=[1,2,3]>>> l2=[1,2,3]>>> l1 is l2False>>> t1

2020-05-09 01:27:11 159

原创 C/C++/系统调用/python输入输出

1、C2、C++

2020-05-03 18:27:57 717

原创 八皇后 --- 回溯 与 递归

八皇后:在8X8的棋盘上,放置8个皇后,每两个皇后不能同时出现在一个列上或一行上或对角线上;回溯法: 用栈(数组arr[8])表示8行,arr[i]存放第i行所在的列(1~8), topid表示栈顶位置;从第1行开始赋值(从1到8尝试),并且检查冲突第1行赋值成功后,开始给第2行开始赋值(从1到8尝试),并且检查冲突…1、每当前面一行赋值成功,则topid++,重新进入while循环,则...

2020-04-30 00:23:52 193

原创 Python基础教程1笔记

第一章 快速上手:基础知识1、运算符1/2 # 除法,返回浮点数 ans = 0.51//2 # 整除,返回整数 ans = 01%3 # 求余 ans = 11%-3 # 求余 ans = -2-1%3 # 求余 ans = 23*3 # 乘法 ans = 93**3 # 乘方(求幂) ans = 27-3**2 # 乘方(求幂) ans = -9...

2020-04-27 23:00:00 421

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除