c/c++
文章平均质量分 84
xiaofei0859
这个作者很懒,什么都没留下…
展开
-
[C/C++] static在C和C++中的用法和区别
转自:http://blog.csdn.NET/skyereeee/article/details/8000512static的三个作用:(1)局部静态变量(2)外部静态变量/函数(3)静态数据成员/成员函数前两种C和C++都有,第三种仅在C++中有,下面分别作以下介绍:一、局部静态变量在C/C++中,局部变量按照存储形式可分为三种auto,转载 2017-08-08 22:36:06 · 210 阅读 · 0 评论 -
一个 Linux 上分析死锁的简单方法
简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就转载 2017-08-21 11:47:39 · 1789 阅读 · 0 评论 -
pmap学习:系统测试中怎么确定内存泄露(memory leak)
性能测试的一项重要工作就是检查有没有内存泄露。Linux下通过top/free/pmap/ps,会提供许多关于内存分配的信息,如top里面的VIRT,RSS,SWAP,VSZ,RES,SHR等等,到底哪些参数能够用来检测memory leak呢?虽然baidu,google很方便,但是一直没有找到一个令人信服的答案。这些天一直在研究,结合我在以往实际工作中的一些经验,在此做一个总结:转载 2017-08-21 14:29:24 · 6319 阅读 · 1 评论 -
linux 工具篇
记录,学习使用http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/index.html原创 2017-08-21 15:23:39 · 340 阅读 · 0 评论 -
Linux下定位内存泄漏-查看内存空间
查看程序内存空间两种方法一、查看/proc/{pid}/maps文件#cat /proc/568/maps00008000-0036a000 r-xp 00000000 00:0e 236 /home/hik/hicore00372000-003a5000 rw-p 00362000 00:0e 236 /home/hik/hicore转载 2017-08-21 09:46:03 · 5255 阅读 · 0 评论 -
内存泄漏的问题如何解决(linux)
内存泄漏的问题,在百度是遇到最多的,阿里相对少点。与内存泄漏斗争了很久,我总结下常用的一些有效测试方法吧。 1、valgrind,这是非常好用的工具,虽然参数很多,输出结果较多,但是只要认真看下,就很容易发现问题,报告是很详细的,不要被吓倒。valgrind检测的内存泄漏是非常准的,可以精确定位到代码行甚至是变量。valgrind基于valginrd core框架,这是个非常有强大的框架转载 2017-08-21 12:00:20 · 852 阅读 · 0 评论 -
C++和双重检查锁定模式(DCLP)的风险
多线程其实就是指两个任务一前一后或者同时发生。1 简介当你在网上搜索设计模式的相关资料时,你一定会找到最常被提及的一个模式:单例模式(Singleton)。然而,当你尝试在项目中使用单例模式时,一定会遇到一个很重要的限制:若使用传统的实现方法(我们会在下文解释如何实现),单例模式是非线程安全的。程序员们为了解决这一问题付出了很多努力,其中最流行的一种解决方法是使用一个新的设转载 2017-09-25 16:55:44 · 450 阅读 · 0 评论 -
STL中序列容器的选择
在STL中基本容器有: vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了底层采用的是树型结构,多数使用平衡二叉树实现,查找某一值是常数时间,遍历起来效果也不错,转载 2017-09-27 10:55:26 · 316 阅读 · 0 评论 -
C++关键字this
this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子: void Date::setMonth( int mn ) { month = mn; // 这三句是等价的 this->month = mn; (*this).month = mn; } 1. this只能在成员函数中使用。全局函数,静态函数都转载 2017-11-17 14:53:49 · 399 阅读 · 0 评论 -
如何使用strace+pstack利器分析程序性能
引言有时我们需要对程序进行优化、减少程序响应时间。除了一段段地对代码进行时间复杂度分析,我们还有更便捷的方法吗?若能直接找到影响程序运行时间的函数调用,再有针对地对相关函数进行代码分析和优化,那相比漫无目的地看代码,效率就高多了。将strace和pstack工具结合起来使用,就可以达到以上目的。strace跟踪程序使用的底层系统调用,可输出系统调用被执行的时间点以及各个调用转载 2017-08-21 10:57:51 · 316 阅读 · 0 评论 -
一种定位内存泄露的方法(Linux)
本文是《一种定位内存泄露的方法(Solaris)》对应的Linux版本,调试器使用gdb。主要介绍实例部分。其他请见《一种定位内存泄露的方法(Solaris)》。实例:模拟new失败的程序:#include class ABC{public: virtual ~ABC(){} int i;转载 2017-08-21 10:45:41 · 525 阅读 · 0 评论 -
Linux进程内存分析和内存泄漏定位
在Linux产品开发过程中,通常需要注意系统内存使用量,和评估单一进程的内存使用情况,便于我们选取合适的机器配置,来部署我们的产品。linux本身提供了一些工具方便我们达成这些需求,查看进程实时资源top工具,更详细的进程内存堆栈情况,pmap工具,Linux进程运行时状态信息也会保存在proc目录下,相应进程ID目录下,这里有很丰富的信息,先讨论进程内存。 借助网上大转载 2017-08-21 10:35:10 · 6276 阅读 · 0 评论 -
Static关键字用法总结
Static关键字用法总结static关键字是C, C++中都存在的关键字。static从字面理解,是“静态的“的 意思,与此相对应的,应该是“动态的“。static的作用主要有以下3个:1、扩展生存期;2、限制作用域;3、唯一性;1、扩展生存期这一点主要是针对普通局部变量和static局部变量来说的。声明为static的局部变量转载 2017-08-08 22:46:00 · 2092 阅读 · 0 评论 -
【C/C++】类中的const成员 static成员
const 数据成员const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。所以不能在类声明中初始化 const 数据成员,因为类的对象未被创建时,编译器不知道const 数据成员的值是什么。 const 数据成员的初始化只能在类的构造函数的初始化表中进行。要想建立在整个类中都恒转载 2017-08-08 23:04:37 · 476 阅读 · 0 评论 -
C++的单例模式与线程安全单例模式(懒汉/饿汉)
1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类唯一的实例。 上代码: 123456转载 2017-08-09 09:43:29 · 215 阅读 · 0 评论 -
C++最简洁的单例模式
想必每一位程序员都对设计模式中的单例模式非常的熟悉吧,以往我们用C++实现一个单例模式需要写以下代码: 1 class CSingleton 2 { 3 private: 4 CSingleton() //构造函数是私有的 5 { 6 } 7 static CSingleton *m_pInstance; 8 publ转载 2017-08-09 10:34:29 · 340 阅读 · 0 评论 -
C++ 线程安全的单例模式
废话不多说,常用的代码积淀下来。一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实例的懒汉模式:转载 2017-08-09 12:15:49 · 343 阅读 · 0 评论 -
INT_MAX和INT_MIN注意事项
INT_MIN在标准头文件limits.h中定义。#define INT_MAX 2147483647#define INT_MIN (-INT_MAX - 1)1212在C/C++语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意思是对整数21473648取负,但是2147483648已经溢出了int的上限,所以定义为(-IN转载 2017-08-17 08:31:38 · 18397 阅读 · 0 评论 -
C语言数组中的地址偏移问题
本文讨论在C/C++中,一维数组和二维数组中的地址偏移问题。一维数组 int a[3];二维数组 int a[3][3];1、先看一维数组的情况:[cpp] view plain copy#include using namespace std; int main() {转载 2017-08-17 21:25:49 · 7229 阅读 · 0 评论 -
linux 内存查看方法:meminfo\maps\smaps\status 文件解析
Linux 下面查看内存有多种渠道,比如通过命令 ps ,top,free 等,比如通过/proc系统,一般需要比较详细和精确地知道整机内存/某个进程内存的使用情况,最好通过/proc 系统,下面介绍/proc系统下内存相关的几个文件 单个进程的内存查看 cat /proc/[pid] 下面有几个文件: maps , smaps, status maps 文件转载 2017-08-21 09:54:11 · 2450 阅读 · 0 评论 -
Linux下 /proc/maps 文件分析
/proc//maps查看进程的虚拟地址空间是如何使用的。该文件有6列,分别为:地址:库在进程里地址范围权限:虚拟内存的权限,r=读,w=写,x=,s=共享,p=私有;偏移量:库在进程里地址范围设备:映像文件的主设备号和次设备号;节点:映像文件的节点号;路径: 映像文件的路径每项都与一个vm_area_struct结构成员对应,范例:应用程序的正文段(权转载 2017-08-21 10:24:38 · 3403 阅读 · 0 评论 -
C++标准转换运算符const_cast
前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”。要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了解的知识总结一下。C++提供了四个转换运算符:转载 2017-11-21 20:57:03 · 401 阅读 · 0 评论