![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 54
^卿^
他日若是凌云志,敢笑黄巢不丈夫
展开
-
windows的malloc到virtualAlloc的调用
windows的malloc到virtualAlloc调用 先介绍下基本知识Win32 内存结构首先要搞清楚【虚拟内存、交换文件、页面文件、RAM、物理存储、虚拟地址空间】这几个概念!虚拟内存是操作系统的内存管理方式,对上层应用屏蔽了页面文件与RAM的区别与调度方式。先看看操作系统,再来说吧!Windows操作系统中的内存结构 在没有充分的理解函数集合是如何工作的以及它们各自是如何影响操作系统的情况下,在你的应用程序中确定用于管理内存的函数或函数集合是很困难的。下面重点介绍虚拟内存(Vir原创 2021-08-12 22:06:09 · 1105 阅读 · 0 评论 -
stack
stackstack的原则是先进后出,底层实现也是基于list进行实现。#ifndef TSTACK_H#define TSTACK_H#include <stdlib.h>#include <string.h>#include <list>#include <stack>using namespace std;template <class T>class TStack{public: TStack();原创 2021-08-11 21:41:51 · 100 阅读 · 0 评论 -
C++ remove_reference(引用移除)
C++ remove_reference(引用移除)demo代码#include <iostream>using namespace std;int main(){ cout << "Hello World!" << endl; int val = 5; int& valRef = val; int& temp = valRef; valRef = 6; printf("valRef:%d原创 2021-06-04 21:28:01 · 4279 阅读 · 0 评论 -
linux 之 __thread & pthread_key_t
linux 之 __thread & pthread_key_t在说__thread之前,先来看看pthread_ket_t吧。参考:http://blog.csdn.net/lmh12506/article/details/8452700上面的博文说的比较通俗易懂。线程私有数据可以理解为线程内的全局变量。在线程内可以被所有函数访问,但是不能被其他线程的函数访问。对于pthread_key_t的使用,最好使用RAII://博主参照muduo写的#include <pthread.h&原创 2021-06-04 21:27:28 · 375 阅读 · 0 评论 -
C++ 线程安全的单例模式总结
C++ 线程安全的单例模式总结什么是线程安全?在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。如何保证线程安全?给共享的资源加把锁,保证每个资源变量每时每刻至多被一个线程占用。让线程也拥有资源,不用去共享进程中的资源。如: 使用threadlocal可以为每个线程的维护一个私有的本地变量。什么是单例模式?单例模式指在整个系统生命周期里,保证一个类只能产生一个实例,确保该类的唯一性。单例模式分类单例原创 2021-06-03 22:40:26 · 155 阅读 · 0 评论 -
引用、指针、普通类型的大小,以及相互转换的分析
引用、指针、普通类型的大小,以及相互转换的分析转换调用的函数 对象不存在,且没有用别的对象来初始化,就是调用了构造函数 对象不存在,且用别的对象来初始化,就是拷贝构造函数 对象存在,用别的对象来给他赋值,就是赋值函数。#include <iostream>using namespace std;class StructObj{public: StructObj() { a = 1; b = 2; }原创 2021-06-03 22:10:23 · 157 阅读 · 0 评论 -
C++中的mutable关键字
C++中的mutable关键字mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词。在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。我们知道,被const关键字修饰的函数的一个重要作用就是为了能够保护类中的成员变量。即:该函数可以使用类中的所有成员变量,但是不能修改他们的值。然而,在某些特殊情况下,我们还是需要在const函数中修改类的某些成员变量,因为要修改的成转载 2021-06-03 21:28:41 · 345 阅读 · 0 评论 -
C++ noncopyable原理及实现
C++ noncopyable原理及实现默认构造函数、拷贝控制成员以及它们的合成版本默认构造函数不含参数或者只含一个参数并且参数有默认值的构造函数。如果类没有定义任何构造函数,编译器会为其合成一个无参默认构造函数,也就是合成的默认构造函数。如果类定义了构造函数,编译器不会为其合成默认构造函数,也就不能执行默认初始化了,如:class A { int val; A(int v):val(v) {}};A a; //编译出错,没有默认构造函数可以指定编译器合成一个默认构转载 2021-06-03 21:13:19 · 256 阅读 · 0 评论 -
stdsame 与 typeid()
C++11的模板类型判断——std::is_same和std::decayC++11的模板类型判断——std::is_same和std::decay问题提出:有一个模板函数,函数在处理int型和double型时需要进行特殊的处理,那么怎么在编译期知道传入的参数的数据类型是int型还是double型呢?如:#include <iostream>template<typename TYPE>void typeCheck(TYPE data){ //do someth转载 2021-06-03 20:49:39 · 251 阅读 · 0 评论 -
关于__builtin_expect
关于__builtin_expect先上代码 #include <stdio.h> #define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0) int main(int argc, const char* argv[]) { int count = 10; if (likely(count > 1)) print转载 2021-06-03 18:46:06 · 113 阅读 · 0 评论 -
sqlite 数据库写入速度的提升
之前做个爬虫,想把数据写入本地数据库,发现数据库的写入速度每条只有10次左右,一直没有找到好的方法提升他。在一次偶然的机会看到了关于sqlite的一些设置,才知道可以通过设置提升的。其实原理就是不让数据库的每次提交写入磁盘,而做一个缓存,每隔一定时间进行提交不废话了,直接上代码#include <QCoreApplication>#include <QTextCode...原创 2019-11-30 14:08:59 · 2784 阅读 · 2 评论 -
Qt探秘——谈ui文件的用法
相信用过Qt Designer的朋友,对Qt Project中的.ui文件并不陌生。这个文件在Qt Designer中并不能直接修改其源代码,而只能通过Qt Designer的图形工具对其进行操作。对于这一点,我不得不要赞一下设计Qt Designer的人,因为这大大可以避免.ui文件中出现语法错误的概率,同时使得程序员能省下大量的程序界面设计时间进而缩短整个程序项目的开发。 从另一...转载 2018-12-29 13:57:22 · 215 阅读 · 2 评论 -
C++ 虚函数表解析
C++ 虚函数表解析<?xml:namespace prefix = o /> 陈皓 http://blog.csdn.net/haoel</font></a><strong></strong></p><p><strong></strong&am转载 2019-01-02 17:32:03 · 82 阅读 · 0 评论 -
C++ 实现把非静态成员函数作为回调函数(非static)
转载地址:http://qimo601.iteye.com/blog/1727645 众所周知,C++的类成员函数不能像普通函数那样用于回调,因为每个成员函数都需要有一个对象实例去调用它。 通常情况下,要实现成员函数作为回调函数,一种常用的方法就是把该成员函数设计为静态成员函数,但这样做有一个缺点,就是会破坏类的结构性,因为静态成员函数只能访问该类的静态成员...转载 2019-05-05 13:16:28 · 1432 阅读 · 0 评论 -
基于C++ 的 文件操作封装(linux)
#include "ofile.h"OFile::OFile(){ mFIlePath = ""; mMode = NULL; m_fp = NULL; mType = UNKNOW; isOpen = false;}void OFile::setFilePath(std::string path, FILE_OPENTYPE type){...原创 2019-05-13 21:53:26 · 926 阅读 · 0 评论 -
基于C++11封装的linux定时器(包含单次定时和循环定时)
#ifndef _TIMER_H_#define _TIMER_H_#include <functional>#include <chrono>#include <thread>#include <atomic>#include <memory>#include <mutex>#include <co...原创 2019-05-13 21:58:23 · 1784 阅读 · 0 评论 -
基于C++ 封装的定时器(未使用C++11)
#ifndef TIMEOUTCALLBACK_H#define TIMEOUTCALLBACK_H#include <stdio.h>#include <string>class TimeoutCallback{public: virtual void timeout(std::string) = 0;};#endif // TIM...原创 2019-05-13 22:04:13 · 519 阅读 · 0 评论 -
linux的tcp非阻塞客户端与服务端demo源码
客户端#include <stdio.h> #include <string.h> #include <errno.h> #include <sys/socket.h> #include <resolv.h> #include <stdlib.h> #include <netinet/in....原创 2019-05-15 11:06:01 · 994 阅读 · 0 评论 -
C#调用mingw编译出来的动态链接库
一般情况C#调用MSVC编译出来的C/C++动态库,不会有太大问题,但是如果是mingw编译出来的呢?答案是不确定的,得取决于你如何编译!今天在这用一个例子实现C# 调用mingw编译出来的动态链接库编译库:qt的pro文件(因为qt用习惯了)#-------------------------------------------------## Project crea...原创 2019-08-30 17:24:27 · 1226 阅读 · 1 评论 -
音视频从零学习
近来,直播越来越火,因此很多人也想开始学习音视频编程技术的相关知识。因此本人决定将毕生所学有关音视频方面的知识记录于此供初学者学习之用。 本教程针对初学者,从零开始学习视频编程技术,最终向大师级进发。学习完本教程,你将掌握基本上的音视频编程知识,最终可以独立完成音视频项目的开发。 教程主要以文字为主,必要时候会加上图片解释说明。偶尔文字描述比较麻烦的时候也会直接以视频...转载 2018-12-29 13:41:14 · 119 阅读 · 0 评论