转载:__builtin_expect 说明
作者:大明白链接:https://www.jianshu.com/p/2684613a300f来源:简书 这个指令是gcc引入的,作用是允许程序员将最有可能执行的分支告诉编译器。这个指令的写法为:__builtin_expect(EXP, N)。意思是:EXP==N的概率很大。 一般的使用方法是将__builtin_expect指令封装为likely和unlikely宏。这两个宏的写法
[c++11]我理解的右值引用、移动语义和完美转发
转载 自 https://www.jianshu.com/p/d19fc8447eaa c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。 左值、右值C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左
设计模式:观察者模式(observer)
程序员必看--23种设计模式及解释(中英文对照)
转自:http://blog.csdn.net/yaolingrui/article/details/7338263设计模式是每个程序员的必修课,这里将23种模式整理在一起,想学习这方面知识的朋友们有福了,呵呵。Singleton Pattern(单例模式):Ensure a class has only one instance, and provide a&nbs...
LINUX 中的mmap浅析
LINUX 中的mmap浅析一、mmap基本原理和分类在LINUX中我们可以使用mmap用来在进程虚拟地址空间中分配创建一片虚拟内存地址映射其可以是1、文件映射 使用文件内容初始化内存2、匿名映射 初始化全为0的内存空间(calloc也可以)下面配图来自UNIX系统编程手册而对于是否共享又分为1、私有...
percona pt-pmp 用法
转载:http://www.cnblogs.com/ivictor/p/6012183.htmlpt-pmp有两方面的作用:一是获取进程的堆栈信息,二是对这些堆栈信息进行汇总。进程的堆栈信息是利用gdb获取的,所以在获取的过程中,会对mysql服务端的性能有一定的影响。用官方的话说:This will freeze the program for some period of time, rangi...
LINUX C 父进程建立多个子进程循环非堵塞回收列子
下面 代码主要用于复习,留于此点击(此处)折叠或打开/************************************************************************* > File Name: fork5.c > Author: gaopeng QQ:22389860 all right reserved > M...
二、(LINUX 线程同步) 互斥量、条件变量以及生产者消费者问题
原创转载请注明出处:在线程同步中我们经常会使用到mutex互斥量,其作用用于保护一块临界区,避免多线程并发操作对这片临界区带来的数据混乱,POSIX的互斥量是一种建议锁,因为如果不使用互斥量也可以访问共享数据,但是可能是不安全的。其原语包含:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; 静态初...
(转)*Socket TIME_WAIT 问题Q&A
(转)*Socket TIME_WAIT 问题Q&Atcp/ip详解的卷1有详细介绍过tcp的相关内容,其中TIME_WAIT讲得有点晦涩,今日找到一篇不错的文章,特拿来分享一下。 netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"/t",state[key]}'会得到类似下面的结果,具体数字会有所不同:...
c++涉及模式 桥接模式(bridge Pattern)
c++涉及模式 桥接模式(bridge Pattern)考虑这样一个问题:需要获得一个图形,这个图形可以是圆形,可以是正方形,可以使长方形其颜色可以是蓝色可以是红色可以是绿色,如果这种情况下将设计写死,那么可以看到有3*3=9 个类,但是图形和颜色更多呢?那么成为一个基本不能完成的任务,那么在这种情况下我们就需一种叫做桥...
C++ 设计模式 装饰模式(Decorator Pattern)
C++ 设计模式 装饰模式在结构型模式中装饰模式给我留下了深刻的印象,其中也感觉到在设计模式中基本都是依赖C++的多态来实现,装饰模式也不例外,他允许在不改变原有类的代码的基础上,不通过直接继承原有类的代码通过一个抽象接口层进行实现,甚至可以随意的组合,所以这里记录之以备使用下面是模型图:下面是一...
LINUX 如何实现多线程进行cp复制
关于这个问题,意义虽然有限因为一般来说在复制文件的时候,实际的瓶颈来自于I/O,不管开启多少个线程实际上速度并不会快多少,但是为了练习多线程编程,这里给出了一种C++代码实现的方式,代码附在最后。实际上就是将一个文件分割为多个片段,开启多个线程进行同时复制,如果用户制定的并行大于服务器实际的CPU核数,程...
C++设计模式创建型工厂模式
工厂模式中使用了多态的原理,来将具体实现和接口进行有效的解耦合,符合开闭原则和依赖倒置原则需要新加功能的时候不需要对原有代码进行修改。抽象类human和抽象类factory就是调用接口,而实际的生产过程通过factory的子类(如boyfactory)来new一个具体的human(如:boy)子类然后返回一个human父类的指针完成,如下图:...
C++单例懒汉式和多线程问题(MUTEX 保护)
单例懒汉式和多线程问题作为单例模式,是在整个程序运行期间只会建立一份内存空间,为了达到这个目标1、需要将构造函数设置为私有成员2、需要一个私有的静态指针指向自身3、需要一个公有的静态函数将这个上面的静态指针露出来如下的代码就是一个懒汉式的单例点击(此处)折叠或打开#in...
C++仿函数
所谓仿函数就是和函数调用非常类似的一种调用方式,实际上仿函数只是重载了()运算符,这种方式在STL容器函数中使用非常普遍,其中又分为函数对象和谓词class t{public:void operator()(stu& a) 函数对象(一元)/*bool operator()(stu& a) 谓词(一元),谓词只会放回布尔值*/};void test(stu& a) 函数那么调用我...
C++ 简单实现数组类泛型编程示例
原创:C++ 简单实现数组类泛型编程示例1、使用模板来实现泛型编程2、本数组应该能够存储各种基础类型,各种复杂的类类型3、应该实现部分操作符重载其实操作符重载满满的都是套路。代码如下:点击(此处)折叠或打开模板类实现:/***********************************...
C++操作符重载
在C++中经常会遇到重载运算符的问题,其实运算符重载必须将运算符看做一个函数,分清他的形参返回值,必须搞清楚内存在哪里如何分配如何回收什么时候生成匿名对象,什么时候使用this指针返回。运算符可以用友元函数和成员函数完成,一般来讲都使用成员函数,但是某些特殊的情况必须使用友元函数,比如<< 因为其左操作...
C++实现通用双向链表
使用C++完成双向通用链表双向链表不用多说,通用链表因为数据结构不确定的,使用一个VOID指针指向数据,什么数据都可以挂上去,这样来封装链表,可以作为基础类也可以单独使用,这里只是为了练习C++封装的语法,实现了简单的增加和删除链表由于实际数据类型不能确定,打印链表数据使用公有函数来完成,完成了正向打印反...
再论C++构造函数分类和调用时机以及匿名对象
原创请注明出处:我们这里主要讨论构造函数的构造函数的分类和其调用时机测试类如下:namespace test_n{ int A_G=0; class test { public: &nbs...
C语言 将字符串按照指定字符分离并且反转(三级指针)列子
C语言 将字符串分离并且反转(三级指针)本程序完成功能1、将输入的字符串按照指定字符分离为子字符串2、将子字符串进行反转使用方法在栈空间分配一个三级指针,指向堆内存空间的指针数组的位置,每个指针数组成员又指向一个字符串,必须明确如下的内存四区图这里只画最为复杂的分离字符函数,而不画反转函数,因为反...