c++
文章平均质量分 76
shenya1314
这个作者很懒,什么都没留下…
展开
-
掌握 Linux 调试技术
本文讨论了四种调试 Linux 程序的情况。在第 1 种情况中,我们使用了两个有内存分配问题的样本程序,使用 MEMWATCH 和 Yet Another Malloc Debugger(YAMD)工具来调试它们。在第 2 种情况中,我们使用了 Linux 中的 strace 实用程序,它能够跟踪系统调用和信号,从而找出程序发生错误的地方。在第 3 种情况中,我们使用 Linux 内核的 Oops...转载 2019-03-06 00:01:36 · 978 阅读 · 0 评论 -
右值引用
概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i; 这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通过&&我们就可以很方便转载 2017-12-12 13:51:29 · 308 阅读 · 0 评论 -
C++ Lambda表达式用法
C++ 11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda的语法形式如下:[函数对象参数] (操作符重载函数参数) mutable或exception声明 -> 返回值类型 {函数体}可以看到,Lambda主要分为五个部分:[函数对象参数]、(操作符重载函数参数)、mutable或exception声明、-> 返回值类型、{函数体}。下面分别进行介转载 2017-12-10 18:31:21 · 652 阅读 · 0 评论 -
函数重载(overload)、函数覆盖(override)与隐藏
“overload”翻译过来就是:超载,过载,重载,超出标准负荷;“override”翻译过来是:重置,覆盖,使原来的失去效果。先来说说重载的含义,在日常生活中我们经常要清洗一些东西,比如洗车、洗衣服。尽管我们说话的时候并没有明确地说用洗车的方式来洗车,或者用洗衣服的方式来洗一件衣服,但是谁也不会用洗衣服的方式来洗一辆车,否则等洗完时车早就散架了。我们并不要那么明确地指出来就心知肚明,这就有重转载 2017-09-02 21:53:11 · 478 阅读 · 0 评论 -
关于异步与多线程的区别
比如在在Fn函数中调用PostMessage,而在MainWndProc函数中处理消息: void Fn() { ...... PostMessage(参数); FncPrint(); ...... } LRESULT CALLBACK MainWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARA转载 2017-07-26 20:24:12 · 274 阅读 · 0 评论 -
C++任务队列与多线程
很多场合之所以使用C++,一方面是由于C++编译后的native code的高效性能,另一方面是由于C++优秀的并发能力。并行方式有多进程 和多线程之分,本章暂且只讨论多线程,多进程方面的知识会在其他章节具体讨论。多线程是开发C++服务器程序非常重要的基础,如何根据需求具体的设计、分配线程以及线程间的通信,也是服务器程序非常重要的部分,除了能够带来程序的性能提高外,若设计失误,则可能导致程序复杂而转载 2017-07-30 23:13:21 · 2126 阅读 · 0 评论 -
skynet任务调度分析
skynet任务调度分析博客分类: 并发luaskynet 云风同学开源的skynet,当前规模是8K+ C代码和2K+ lua代码,实现了一个多线程高并发的在线游戏后台服务框架,提供定时器、并发调度、服务扩展框架、异步消息队列、命名服务等基础能力,支持lua脚本。单服务器支持10K+客户端接入和处理。 我个人比较关注转载 2017-07-30 03:51:07 · 715 阅读 · 0 评论 -
std::condition_variable
比较常见的一个使用 std::condition_variable 场合就是线程池的消息队列。逻辑线程(可能多个)将消息推入消息队列,线程池中的工作线程(多个)会从消息队列中取出消息进行处理,如果队列中没有消息则进入睡眠状态等待消息。本文将通过这种消息队列的实现,来分析如何使用 std::condition_variable 以及使用过程中的注意事项。先看下这个消息队列的最终实现:vo原创 2017-06-20 20:00:22 · 501 阅读 · 0 评论 -
linux 内存管理
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。前言内存管理一向是所有操作系统书籍不惜笔墨重点讨论的内容,无论转载 2017-06-19 13:16:20 · 324 阅读 · 0 评论 -
linux内核部件分析之——waitqueue与线程的阻塞
当你必须一个复杂的系统,协调系统的方方面面,灵活地支持各种机制和策略,即使很简单的问题也会变得很复杂。Linux绝对就是这样一个复杂的系统。所以我们要理解它,尽量从原理的角度去理解事务的处理流程,尽量避免各种细枝末节的干扰,尽量规避那些足以压垮自己的庞然大物。(尽管细致末节和庞然大物很可能就是linux闪光的地方,但我们还是小心为上。)原理 现在我们来考虑linux中线程的阻转载 2017-06-19 11:25:06 · 1442 阅读 · 0 评论 -
linux阻塞与非阻塞,同步与异步、I/O模型
1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步: 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。也就是必须一件一件事做,等前一件做完了才能做下一件事。 例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户转载 2017-06-19 11:11:48 · 531 阅读 · 0 评论 -
关于TCP的问题总结
本文章已收录于:计算机网络一. 什么是TCPTCP 协议是一种面向连接的,为不同主机进程间提供可靠数据传输的协议。TCP协议假定其所使用的网络栈下层协议(如IP 协议)是非可靠的,其自身提供机制保证数据的可靠性传输。在目前的网络栈协议族中,在需要提供可靠性数据传输的应用中,TCP协议是首选的,有时也是唯一的选择。TCP 协议是在最早由Cerf和Kahn[1]所提出的有关网络转载 2017-06-19 10:51:20 · 554 阅读 · 0 评论 -
关于黏包
UDP丢包是因为数据包在传送过程中丢失了 而TCP是基于流式的发送 并且存在丢包重发机制 TCP是可靠连接而UDP是不可靠的这个我就不多说了关于TCP的粘包 正是由于TCP是流式传送的 也就是连接建立后可以一直不停的发送 并没有明确的边界定义 而你用UDP发送的时候 是可以按照一个一个数据包去发送的 一个数据包就是一个明确的边界而TCP并没有数据包的概念 是完全流式的原创 2017-06-19 10:41:19 · 496 阅读 · 0 评论 -
STL容器map的下标运算符[]
在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员可以很方便地根据关键字获取到对应的值。虽然使用方便,但是还是有一些地方容易出现问题,值得大家的注意。 下面代码的输出结果会什么呢?[cpp] view plain转载 2017-06-01 13:18:04 · 384 阅读 · 0 评论 -
C++经典面试题
1,关于动态申请内存答:内存分配方式三种:(1)从静态存储区域分配:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。全局变量,static变量。(2)在栈上创建:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。转载 2017-05-30 22:22:49 · 418 阅读 · 0 评论 -
c++ 11 常用语法
1 新类型C++ 11新增了long long和unsigned long long,以支持64bit宽度; 新增char16_t和char32_t以支持16位和32位字符表示; 增加了“原始”字符串。 2 初始化C++ 11扩展了大括号{}的适用范围,既可以用于基本类型,也可以用于自定义类型:int x = {5};couble y转载 2017-12-17 17:58:53 · 862 阅读 · 0 评论 -
Eclipse CDT c++支持C++11
最近要在Linux 环境下面写一些代码,需要支持C++11,可是CDT 不认识C++11的特性,看了很多网上的配置资料,各种版本下面还是不一样,Eclipse 16.04 CDT 9.4,GCC 5.4首先创建一个C++ project,写点C++11 的代码,出现红色波浪线;然后右击项目-》Properties->C/C++ Build ->Settings ->Tool Se...原创 2018-02-26 20:30:27 · 275 阅读 · 0 评论 -
使用 C++11 智能指针时要避开的 10 大错误
使用 C++11 智能指针时要避开的 10 大错误2016/08/19 · C/C++, 开发 · C++, C++11, 指针本文由 伯乐在线 - 欣仔 翻译,wrm 校稿。未经许可,禁止转载!英文出处:Deb Haldar。欢迎加入翻译组。我很喜欢新的C++11的智能指针。在很多时候,对很多讨厌自己管理内存的人来说是天赐的礼物。在我看来,C++11的智能指针能使得C++新手...转载 2018-11-05 16:17:33 · 520 阅读 · 0 评论 -
C++智能指针《第一篇》
#include <iostream>#include <memory>using namespace std;//循环引用问题template <typename T>class Node{public: Node(const T& value) :_pPre(NULL) , _pNext(NUL...原创 2018-11-05 16:16:13 · 207 阅读 · 0 评论 -
C++路线
初级一C++运行原理,C++源代码构成;类的构成与写法能用C++书写简单的类;能用面向对象的方法来思考和解决简单问题5初级二头文件;循环和各种逻辑语句;类的深入;继承能编写一些较为复杂的逻辑方法;能用面向对象的思考方法解决较为复杂的模型5初级三数组;指针,常量,指针常量和常量指针的区别;堆内存和栈内存;结构体和枚举类型灵活运用数组;深入掌握指针应用理解内存管理;熟...转载 2018-08-19 20:14:19 · 855 阅读 · 0 评论 -
八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间...转载 2018-06-02 13:45:55 · 518 阅读 · 0 评论 -
C++ string类的实现
学了C++的重载机制之后,忍不住去探究一下C++中string类的内部实现过程。于是仿照这string类的功能,写了一个自己的string类练练手。可能还有些东西并未完善,后面再不断去完善。参考代码如下所示:Main.cpp[cpp] view plain copy/***************************************************** Copyright (C...转载 2018-06-02 13:17:36 · 6793 阅读 · 0 评论 -
C++11 并发指南九(综合运用: C++11 多线程下生产者消费者模型详解)
生产者消费者问题是多线程并发中一个非常经典的问题,相信学过操作系统课程的同学都清楚这个问题的根源。本文将就四种情况分析并介绍生产者和消费者问题,它们分别是:单生产者-单消费者模型,单生产者-多消费者模型,多生产者-单消费者模型,多生产者-多消费者模型,我会给出四种情况下的 C++11 并发解决方案,如果文中出现了错误或者你对代码有异议,欢迎交流 ;-)。单生产者-单消费者模型顾名思义,单生产者-单...转载 2018-06-02 13:13:10 · 870 阅读 · 0 评论 -
STL源码笔记(18)—平衡二叉树AVL(C++封装+模板)
AVLTree平衡二叉树在几年前刚学数据结构时,AVL-Tree只是一个仅仅需要掌握其概念的东西,今非昔比,借看STL源码剖析的契机希望从代码层面将其拿下。1.简介二叉查找树给我们带来了很多方便,但是由于其在有序序列插入时就会退化成单链表(时间复杂度退化成 O(n)),AVL-tree就克服了上述困难。AVL-tree是一个“加上了平衡条件的”二叉搜索树,平衡条件确保整棵树的深度为O(log n)...转载 2018-06-02 13:10:23 · 373 阅读 · 1 评论 -
二叉树的C++实现
数据结构与二叉树类的定义我采用链式存储结构来表示二叉树,每一个二叉树节点包含树节点的值、树的左孩子指针、树的右孩子指针:class BiNode{public: char data; struct BiNode *lchild,*rchild;};12345那么对于一个二叉树来说,只需要存放指向树根节点的指针即可,另外还需要声明二叉树的一些功能,比如遍历方法、求树高等(BiTr...转载 2018-06-02 13:07:54 · 1948 阅读 · 0 评论 -
链表C++实现
节点定义:typedef struct node { int data; struct node *next;}NODE;1234类定义class LinkList{private: NODE *head;public: LinkList() { head = NULL; } ~LinkList(); bool clearSqList();...转载 2018-06-02 13:06:50 · 506 阅读 · 0 评论 -
一直没整理字符串的东西,面试必备
strncpy(a,b,5); a[5]='\0'; char a[10]; memset(a,'#',sizeof(a)); a[10]='\0'; 刚开始学C/C++时,一直对字符串处理函数一知半解,这里列举C/C++字符串处理函数 ,希望对初学者有一定的帮助。 C: char st[100]; 1. 字符串长度 strlen(st); 2....转载 2018-05-30 22:50:18 · 176 阅读 · 0 评论 -
QT 常用类总结
转载:http://www.verydemo.com/demo_c278_i1869.html 使用Qt进行编程必须对 Qt 中常用的类有一定的了解。这些类可以分成两种:一种不是从 QObject 类派生出来的,用来表示各种基本的数据对象,如字符串、图像、字体等,这里将它们通称为基本类;另一种都是从 QWidget 类派生出来的,它们表示一个顶级窗口或者窗口部件,这里将它们统称为窗口类...转载 2018-06-13 10:26:10 · 1832 阅读 · 0 评论 -
windows消息处理机制
消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给应用程序。消息本身是作为一个记录传递给应用程序的,这个记录(一般在 C/C++/汇编 中称为“结构体”)中包含了消息的类型以及其他信息。例如,对单击鼠标所产生的消息来说,这个记录(结构体)中包含了单击鼠标的消息号(WM_LBUTTONDOWN)...转载 2018-05-18 14:14:50 · 646 阅读 · 0 评论 -
C++动多态实现之虚函数与虚表指针
1、静多态与命名倾轧,动多态与虚函数:(1)概述: 我们知道,C++的多态有静多态(Static polymorphism)与动多态(Dynamic polymorphism)之分,静多态是依靠函数重载(function overloading)实现的,而且这种依靠函数重载的多态的实现是采用命名倾轧(关于命名倾轧可参考:C++函数重载与重载原理:命名倾轧 )的方式,是在编译阶段就已经完成了的;...转载 2018-05-17 15:17:23 · 700 阅读 · 0 评论 -
Linux段错误及GDB Coredump调试方法详细
最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决。1. 段错误是什么一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如...转载 2018-04-04 15:33:31 · 796 阅读 · 0 评论 -
c/c++调用JAVA
JNI允许您从本机代码内调用 Java 类方法。要做到这一点,通常必须使用 Invocation API 在本机代码内创建和初始化一个 JVM。下列是您可能决定从 C/C++ 代码调用Java 代码的典型情况: 1.希望实现的这部分代码是平台无关的,它将用于跨多种平台使用的功能。 2.需要在本机应用程序中访问用 Java 语言编写的代码或代码库。 3.希望从本机代码利用标准 Ja...转载 2018-02-23 15:13:37 · 11245 阅读 · 0 评论 -
C/C++ 笔试、面试题目大汇总
1.求下面函数的返回值( 微软)int func(x) { int countx =0; while(x) { countx ++; x = x&(x-1); } return countx; }假定x = 9999。 答案:8思路:将x转化为2进制,看含有的1的个数。 2. 什么是“引用”?申明和使用“引用”转载 2017-05-30 21:49:28 · 297 阅读 · 0 评论 -
C/C++求职者必备的20道面试题
面试题有难有易,不能因为容易,我们就轻视,更不能因为难,我们就放弃。我们面对高薪就业的态度永远不变,那就是坚持、坚持、再坚持。出现问题,找原因;遇到困难,想办法。我们一直坚信只有在坚持中才能看到希望,而不是看到希望才去坚持。人生没有如果,只有结果和后果。既然选择了,就不后悔。年轻就是资本,年轻就要吃苦,就要历练。就要学会在坚持中成长。如此感慨,至深的心得体会,绝对的经验之谈。OK,转载 2017-05-30 12:02:21 · 322 阅读 · 0 评论 -
C++ Boost Thread
标准C++线程即将到来。CUJ预言它将衍生自Boost线程库,现在就由Bill带领我们探索一下Boost线程库。就在几年前,用多线程执行程序还是一件非比寻常的事。然而今天互联网应用服务程序普遍使用多线程来提高与多客户链接时的效率;为了达到最大的吞吐量,事务服务器在单独的线程上运行服务程序;GUI应用程序将那些费时,复杂的处理以线程的形式单独运行,以此来保证用户界面能够及时响应用户的操作。这样使转载 2017-05-02 10:32:40 · 1020 阅读 · 0 评论 -
socket之KEEPALIVE机制与原理分析
Linux之TCP连接时间----TCP keepAlive 详解 (2011-08-11 11:07:04)转载标签: 杂谈 分类: linux在一个正常的TCP连接上,当我们用无限等待的方式调用下面的Recv或Send的时候: ret=recv(s,&buf[idx],nLeft,flags); 或 ret=send(s,&buf[idx],nLef转载 2017-04-15 22:20:29 · 9958 阅读 · 0 评论 -
C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而转载 2017-04-15 22:05:32 · 760 阅读 · 0 评论 -
关于静态库
打开VS2010,新建一个项目,选择win32项目,点击确定,选择静态库这个选项,预编译头文件不选。选预编译头的话,就在.cpp文件中添加 #include "StdAfx.h"最好不要选预编译选项! 在这个空项目中,添加一个.h文件和一个.cpp文件。名字我们起为static.h和static.cpp static.h文件:[cpp]原创 2017-05-01 21:11:34 · 312 阅读 · 0 评论 -
vs2010配置安装使用log4cplus日志系统
log4cplus是C++编写的开源的日志系统,功能非常全面,用到自己开发的工程中会比较专业的,:),本文介绍了log4cplus基本概念,以及如何安装,配置。 ### 简介 ###log4cplus是C++编写的开源的日志系统,前身是Java编写的log4j系统.受Apache Software License保护。作者是Tad E. Smith。log4cplus具有线程安转载 2017-04-06 00:21:01 · 2615 阅读 · 0 评论 -
Dll
初学DLL,结合教程,总结一下自己的所得,希望对DLL初学者们有所帮助。 动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的。所有的C语言标准库函数都存放在某一函数库中。在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添加到可执行文件中。这种方法同只把函数储存在已编译的OBJ文件中相比更有利于代码的重用。但随着Windows这样的多转载 2017-04-30 13:28:29 · 256 阅读 · 0 评论