自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

转载 Linux 多线程 ”一写多读” 模式下的无锁设计

缘起双buffer 无锁 设计指针的切换ptr 竞争条件的解决指针访问丢失延伸结语缘起在linux多线程环境下对同一变量进行读写时,经常会遇到读写的原子性问题,即会出现竞争条件。为了解决多个线程对同一变量访问时的竞争条件问题,操作系统层面提供了锁、信号量、条件变量等几种线程同步机制。如果对变量的每次访问都使用上述机制,由于系统调用会陷入内核空间,需要频繁的进行上下

2018-01-09 16:17:25 904

原创 私有构造函数的作用

一、背景知识 对class本身来说,可以利用它的static共有成员,因为它们独立于class对象之外,不必产生对象也可以使用class的私有域。可以参考静态成员变量和静态成员函数在C++类中的作用来进行理解。二、相关说明 构造函数被class私有化,需要创建对象就必须能够访问到class的私有域,static共有成员可以做到。假如在某个static函数中创建了该class的对象,并以引用或者指

2017-10-12 07:34:05 9082

原创 什么场景下会用到友元函数?

什么场景下会用到友元函数,友元函数的作用是什么,友元函数和普通成员函数又有怎样的区别?这都是C++当中的一些基本概念,掌握好了无论是维护项目还是做项目开发都大有裨益。本文主要浅谈一下C++中的友元函数,如有不足或者疏漏之处,烦请读者朋友及时指出,大家一起改进。 一、概述 友元函数在实现类之间数据共享时,可以减少系统开销,调高效率。比如:类A中的函数需要访问类B中的成员,那么类A中该函数要是类B的

2017-10-11 07:56:42 6771

原创 浅谈C++中的临时对象

本文主要总结了在C++开发过程中所遇到的临时对象产生的相关问题,如有不足或有误之处还希望读者朋友们能够及时之处。 三种常见的临时对象创建的情况:以值的方式给函数传参类型转换函数需要返回对象时一、以值的方式给函数传参 1、按值传递 按值传递时,首先将需要传给函数的参数,调用拷贝构造函数创建一个副本,所有在函数里的操作都是针对这个副本,也正是因为这个原因,在函数体力对该副本进行任何操作都不

2017-10-10 07:52:47 11029 6

原创 C++赋值运算符重载函数和拷贝构造函数

一、提供默认赋值运算符重载函数的时机 当程序没有显示地提供一个以本类或者本类的引用为参数的赋值运算符重载函数时,编译器会自动生成这样一个赋值运算符重载函数。#include <iostream>using namespace std;class Data {public: Data() {} Data(int _data) :data(_data) {

2017-10-05 14:43:16 8216

原创 C++中的内联函数

本文主要和大家一起来学习一下C++中的内联函数,旨在能够更深层次的了解和掌握C++相关用法,力争做到知其然还要知其所以然。 关于内联函数,本文主要从以下几个方面进行了整理和归纳。 一、相关描述 1、内联函数主要目的是为了提高函数的执行效率,用关键字inline放在函数定义的前面即可,将函数指定为内联函数。 2、内联函数通常就是将它在程序中的每个调用点上“内联地”展开,例如定义比较两个数大小的

2017-10-04 21:21:30 328

原创 默认构造函数和构造函数重载

本文主要总结了默认构造函数的相关用法和构造函数重载,旨在能够对平时的项目开发起到一定的夯实基本功的作用,言简意赅,一目了然。首先需要了解构造函数是用来做什么?该类对象被创建时,编译器为对象分配内存空间,并自动调用该构造函数,由构造函数完成数据成员的初始化工作。一、默认构造函数从代码层面进行分析class testClass {public : testClass();//不带参数的默认

2017-09-29 08:15:52 14638 3

原创 静态成员变量和静态成员函数在C++类中的作用

为了便于理解,我们先来说说面向过程设计中的static,对理解面向对象设计中的static多少会有些裨益,也可以加深大家对这方面知识的理解。面向过程中设计中的static主要从以下几个方面来进行说明:静态全局变量,在其他文件中可以定义相同的名字而不会发生冲突;静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到一下次的调用,直到下次赋值;静态函数只能在声明它的文件当中可见,不能被其他

2017-09-29 07:21:56 1659 1

原创 指针和引用什么时候用?

指针和引用到底什么时候用?通常情况下是根据不同场景来选择是使用指针还是引用,选择适合场景需求的才是一个优秀程序员所应具备的能力。 我们在做项目开发时,也会考虑到一个维护成本,如果你的前任是一个“高手”,写的代码你基本看不懂,无外乎两点原因,一是前任的问题,二是你自己的问题。所以平时养成一个好的习惯,修炼好内功自然能够以不变应万变。 一、概念 指针指向的是一块内存,它的内容是所指内存的地址;引用

2017-09-28 07:55:21 4854

原创 函数返回指向内存的指针

在实际项目开发过程中,大家可能经常会用到指针,讲到指针势必会涉及到对内存的操作,如果基本功不扎实可能极容易出现各种随机性的或者是内存泄漏问题。函数返回不能是指向栈内存的指针 栈是临时的。当跳出栈是,其指针对应的值被下次压栈替换掉,可能每次出栈时,系统可能会对刚才压栈的内存初始化,在函数结束时该内存自动消亡。#include <iostream>using namespace std;char

2017-09-28 07:44:29 722

原创 指针函数与函数指针

指针函数和函数指针有什么区别?在什么时候会用到?这可能是初学者容易犯迷糊的地方。本文主要从概念上和用法上来进行相关说明,希望对大家的理解有所帮助。指针函数 指针函数其实说到底返回值就是一个指针。 指针函数原型: int *func(int a,int b); 下面简单举个例子来说明。#include "stdio.h"#include "malloc.h"#include "strin

2017-09-27 08:00:09 247

原创 函数模板和类模板的用法

一、函数模板简介 函数体相同函数都可以用函数模板,根据实参类型替换虚拟类型。 如两个数比较大小:int max(int a,int b){ return a>b?a:b;}char max(char a,char b){ return a>b?a:b;}如果用函数模板实现,通用性和代码简洁性大大提高。#include <iostream>using namespace

2017-09-26 19:20:04 674

原创 什么情况下析构函数需要定义为虚函数?

一、什么情况下析构函数需要定义为虚函数?答案是在实现多态时。如果单单是填空题,相信大家都可以拿满分。但说到何谓之多态,可能大家的回答不尽相同。至于多态时怎样实现的?又有什么样的作用呢?这样深入逼问下去,可能到最后大家都没有朋友做了。 关于多态的相关介绍可以参考博主整理的文章,多态(一)和多态(二)稍加理解,后续有时间会陆续整理相关资料,和大家一起分享。 下面切入正题。二、为什么基类的析构函数是虚

2017-09-26 08:22:12 3177 2

原创 C++多态性(二)

一、虚函数实现机制 1、编译器为每一个具有虚函数的类准备了一张虚函数表,表里面就有很多个虚函数,通过函数指针指向函数体代码。 2、只要类里面有虚函数,编译器就会给这个类的对象数据成员里面增加一个隐含的数据成员——指向虚函数表的指针。 3、在类的成员列表中多了一个指针成员,但是这个指针成员没有办法显示访问,只是为了寻找虚函数表。 4、示意图说明(结合之前多态例子理解) 二、虚析构函数 设计

2017-09-25 19:57:24 451

原创 通过函数给指针申请内存时遇到的内存泄漏问题

通过函数给指针申请内存说到底就是一个参数传递的问题,很简单但是也很容易犯错误。例子(一) 使用一级指针作为参数#include "stdio.h"#include "malloc.h"void mem_malloc(int *p, int num){ p = (int *)malloc(num * sizeof(int)); return;}void m

2017-09-25 12:37:22 1139 2

原创 构造函数可以为虚函数吗?

答案当然是否定的,主要从一下两个角度加以说明。从存储空间角度 虚函数对应一个vtable,可是这个vtable其实是存储在对象的内存空间的。 那么问题来了,如果构造函数是虚函数,就要通过vtable来调用,可是对象空间还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。从使用角度 虚函数主要用于在信息不全的情况下,能够使重载的函数得到对应的调用。构造函数本身

2017-09-25 08:47:44 3552

原创 C++多态性(一)

概念 多态性可以简单的概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。实现方法 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖,或者称为重写(重写成员函数和重写虚函数,只有重写虚函数才能体现C++多态性)。多态的作用 封装可以使得代码模块化,继承可以扩展已存在的代码,而多态的目的是为了接口重用。

2017-09-22 09:22:11 882

原创 怎样在Windows下设置双网卡同时访问内外网

由于项目需求,博主需要能够在PC上同时访问内外网,内网需要能够访问SVN服务器以及其他代码服务器,同时检索资料需要能够访问外网。博主主要是结合实际遇到过得问题,和分享一下设置经验,网上可能有很多介绍,但质量往往参差不齐,本着分享的原则写下此文,希望对大家有所帮助。1、WIN+R 进入cmd 控制台界面,输入route print查询路由信息。查看是否已经配有路由信息。如果有先删除。eg:r

2017-02-07 14:12:48 15911

原创 Linux C语言获取设备MAC地址

#include #include #include #include #include #include void main(){char *device="eth0"; //teh0是网卡设备名unsigned char macaddr[ETH_ALEN]; //ETH_ALEN(6)是MAC地址长度//AF_INET = 1;int i,s;s = socket(AF

2014-09-15 13:52:49 5467

转载 PV操作信号量的设置

PV操作与信号灯的处理相关,P表示通过的意思,V表示释放的意思。所谓信号灯即信号量,实际上就是用来控制进程状态的一个代表某一资源的存储单元。信号量sem是一整数,sem大于等于零时代表可供并发进程使用的资源实体数,但sem小于零时则表示正在等待使用临界区的进程数。   一般需要设置信号量的"事物"是公共资源与事件参与者,如生产消费者问题中的"缓冲区"就是公共资源,"生产者"和消费者"是事件参与

2014-01-11 12:05:23 3133 1

转载 信号量与PV操作、IPV操作

在计算机操作系统中,PV操作是进程管理中的难点。首先应弄清PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:    P(S):①将信号量S的值减1,即S=S-1;           ②如果S³0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。    V(S):①将信号量S的值加1,即S=S+1;

2014-01-11 11:31:54 851

转载 怎样鼠标右键删除SVN文件夹

常常因为某种原因需要删除某个项目的svn文件夹,使项目脱离源代码管理的控制。如果一个一个手动删除.SVN文件夹的话,显然很麻烦。于是到网上搜索了一下,找到一个不错的方法。原作者不知道是谁了,还是要感谢他。将下面的这段文字写在.reg结尾的文本文件中,然后执行。这样你在每个文件夹右击的时候就会出现Delete Svn Folders这个选项了。很是方便!Windows Regis

2014-01-03 15:10:03 751

原创 ubuntu下安装skyeye1.3.3

我的虚拟机版本是:VMware-workstation-full-v8.0.3ubuntu版本是:ubuntu-11.10-dvd-i386 注意:在安装skyeye软件之前,先要更新linux源sudo apt-get update1、安装相关的依赖包,在终端中运行以下命令:sudo apt-get install libgtk2.0-dev pkg-configliba

2012-06-14 16:20:35 575

原创 VMware虚拟机下ubuntu与windows实现文件共享

一、确保虚拟机已经安装了VMwaretools;我的虚拟机版本是:VMware-workstation-full-v8.0.3ubuntu版本是:ubuntu-11.10-dvd-i3861、按下ctrl+alt确保在windows下,先点击VMware工具栏选择"VM"->"Setting"->windows.iso镜像文件,并选择确定 ,然后再点击VMware工具栏选择"VM"->

2012-06-13 18:34:10 746

ubuntu下安装skyeye详细说明

ubuntu下安装skyeye详细说明,文档中有详细的安装说明,都是我一步步总结的,里面有相关测试例子有助于了解skyeye。

2012-06-14

arm-uclinux-tools-base-gcc3.4.0-20040713.sh

ubuntu交叉编译工具,arm-uclinux-tools-base-gcc3.4.0-20040713.sh

2012-06-14

空空如也

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

TA关注的人

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