文章分类 - C/C++
关于C,C++的内存问题的定位
摘要:大部分人觉得C/C++比较难,主要是因为指针的灵活性以及内存的使用,C和C++需要程序员自己来控制内存,自己申请,自己释放,很容易就会出现各种头疼难搞的内存问题从而导致系统core dump,这类问题,除了平时自己写code注意,也要在出现问题的时候懂得借鉴“巨人”为我们提供的定位方法,比如比较好用
阅读全文
关于linux下的死锁(程序卡住)的定位检测
摘要:定位方法:(1)如系统存在运行日志,首先分析日志信息。(2)利用pstack工具打印出此时系统的存在线程堆栈快照。(3)有些阻塞栈可能是因为它需要等待前面的线程执行结束才可以执行,所以要先确定依赖关系。(4)若问题可以复现,可以利用gdb调试系统,但若不确定问题是否可以复现,则推荐不要使用gdb,
阅读全文
GCC内置的原子操作函数
摘要:在多进程(线程)访问资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。原子操作(atomic operation)是不需要synchronized。所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切
阅读全文
外存产生临时文件随进程消失而回收
摘要:当数据量很大,无法全部在内存中进行计算的时候,就需要写出到硬盘产生临时文件,但临时文件的删除有时候可能会产生隐患,如果系统在写出外存的时候,产生了崩溃现象,就会出现临时的文件没办法回收的情况,这些文件会一直占用硬盘资源,这个时候有个简易的处理办法,创建文件之后,立刻调用unlink函数,这个时候文件
阅读全文
关于placement new
摘要:placement new的好处 1.在已分配好的内存上进行对象的构建,构建速度快。 2.可以反复利用同一块已分配好的内存,有效的避免内存碎片问题。 3.建立对象数组时,能够调用带参数的构造函数。 经典介绍 http://blog.csdn.net/zhangxinrun/article/detai
阅读全文
一个简易共享内存池的实现
摘要:线程不安全 my_mem_pool.h my_mem_pool.cpp
阅读全文
Linux下的内存泄露检测(1)------定制自己的内存操作组件
摘要:内存泄露是指程序动态申请的内存在使用结束后并没有释放,导致系统无法正常回收。 例如: 在大型系统中,如果发生内存泄露,随着系统长时间的运行,会导致系统性能下降(内存泄露致使可用内存越来越少)甚至崩溃(泄漏量很大,导致所有内存被占满)。 内存泄露问题是比较严重而且比较难定位,基于这个原因,在大型系统中
阅读全文
C++内存布局
摘要:C和C++的编译器把内存分为3块:静态存储区、栈和堆。 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态变量、全局变量和常量(包括字符串常量和const常量)以及代码段。 栈区:程序开始运行,随着函数、对象的执行,函数内部变量、对象的内部成员变量开始动
阅读全文
C++经验记录
摘要:1.自己实现统一的内存管理模块,方便对内存使用情况的统计以及对内存问题bug的定位。 2.如果数据量很大,且需要在网络中传输,可对数据进行压缩(lz4压缩算法)。 3.性能问题,使用性能工具做针对性分析,有针对性的对代码进行调整,性能工具(VTune) 4.使用TcMalloc对程序进行优化。 5.
阅读全文
ubuntu下llvm(clang)安装步骤
摘要:下载llvm的源代码 下载clang的源代码 下载clang-tools-extra的源代码 下载compiler-rt的源代码 配置编译选项 编译llvm 编译成功后的提示: 安装编译好的llvm clang –version 文章转自: http://blog.csdn.net/gatieme/
阅读全文
内存泄露,越界,数据竞争检测
摘要:一、内存泄露 1、使用自定义的组件申请释放内存,即定义统一接口例如alloc()和free()以供系统中所有操作内存的地方使用,每次申请内存将调用栈信息以一个结构体形式保存到一个容器里面,每次释放内存将对于的调用栈信息从容器里面删除,这样在程序结束的时候便可以统计内存的使用,若程序正常结束,无内存泄
阅读全文
C11中的类型推导auto的使用
摘要:C11提供了auto这个用于类型推导的类型,它不能用于函数参数,不能用于非静态成员变量,无法定义数组和模板参数,使用auto最多的情况就是使用模板迭代器的时候 例如: 对于auto这种类型推导会不会降低效率,是不需要担心这个问题的,因为auto在编译阶段,编译器就已经帮你推倒好了变量的类型。 但是还
阅读全文
C++代码基本优化小技巧
摘要:1.不存在指向空值的引用,意味着引用比指针的效率更高,因为在使用引用之前不需要测试它的合法性;指针可以被重新赋值以指向另一个不同的对象,但是引用总是指向它初始化时指定的对象。 2.使用位运算代替加减乘除取余等计算。 3.用switch代替多层if else,看汇编代码可知,switch有点空间换时间
阅读全文
C++生成唯一文件名通用代码
摘要:经常遇到要生成许多文件,而且需要保证每个文件的文件名不同的情况,于是产生了下面的通用代码。 执行,结果为: 1_20160323-165005.13921.txt2_20160323-165005.13921.txt3_20160323-165005.13921.txt
阅读全文
C 编程基础
摘要:1. 注意区分“=”与“==”,“=”为赋值运算符,“==”为判断是否相等的操作符。 2. 使用如下两条语句可以把输入缓冲区中可能存在的无效数据清理掉 scanf("%*[^\n]");scanf("%*c");3. ASCII码表中列出所有字符数据两种表示方式之间的对应关系'a' 97;'A' 6
阅读全文
C++基础笔记
摘要:********************************************************************* 一.C++的简介1.1发展历史80年代 贝尔实验室 83 正式命名 C++87 GNU 制定了C++标准92 微软和IBM 制定了C++标准98 ANSI/IS
阅读全文
Linux C编程 基础笔记
摘要:********************************************************************************** 和linux相关的一些信息1.GUN计划:GUN的主旨在于发展一个类似Unix,并且为自由软件的操作系统,GUN系统。2.POSIX标
阅读全文
浙公网安备 33010602011771号