![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 89
eydwyz
AA123456123456
展开
-
常用内存泄露检测手段 dmalloc, mpatrol mtrace memwatch dbgmem valgrind Electric Fence
dmalloc用法快速入门原文链接常用内存泄露检测手段有1mtrace 2memwatch 3mpatrol 4dmalloc 5dbgmem 6valgrind 7Electric Fencedmalloc是一个简单易用的C/C++内存leak检查工具,以一个运行库的方式发布。dmalloc能够检查出直到程序运行结束还没有释放的内存,并且能够精确指出在哪个源文件的第几行。dmalloc 主页:http://dmalloc.com支持的平台:AIX, ...转载 2021-02-19 13:33:52 · 708 阅读 · 0 评论 -
tcmalloc浅析
最近学习了tcmalloc机制,它是go里面用到的内存分配机制。本文参考tcmalloc,加上一部分自己的理解。tcmalloc VS ptmalloc(glibc 2.3 malloc) 对于小内存来说,tcmalloc提供线程级别的内存分配,这样就减少了线程之间的竞争,ptmalloc2也提供线程级别分配,但是它的内存被分配到某个线程后就不能重新分配给别的线程,这造成了较大的资源浪费。对于大内存来说,tcmalloc也采用了细粒度且高效的分配策略。 在2.8 GHz P4环境下,tcmal转载 2021-02-19 13:31:07 · 739 阅读 · 0 评论 -
dlmalloc, ptmalloc,tcmalloc和jemalloc内存分配策略研究
https://cloud.tencent.com/developer/article/1173720最近看了glibc的ptmaoolc,Goolge的tcmalloc和jemalloc,顺便做了一点记录。可能有些地方理解地不太对,如有发现还请大神指出。操作系统内存布局各种malloc的内存分配管理方式离不开操作系统的内存布局策略。32位经典内存布局32位系统下经典内存布局如上,程序起始的1GB地址为内核空间,接下来是向下增长的栈空间和由0x40000000向上增长的...转载 2021-02-19 13:30:22 · 1296 阅读 · 1 评论 -
linux中动态加载动态库的方法
1:创建test.h, test.c文件[cpp] view plain copy print?//test.h #ifndef TEST_H_ #define TEST_H_ #include void PrintHello(); int Add(int a, int b); #endi转载 2017-07-10 18:38:43 · 7819 阅读 · 0 评论 -
Linux链接库三(C跟C++之间动态库的相互调用)
http://www.cppblog.com/wolf/articles/74928.htmlhttp://www.cppblog.com/wolf/articles/77828.htmlhttp://www.jb51.net/article/34990.htmC和C++之间库的互相调用extern "C"的理解:很多人认为"C"表示的C语言,实际并非如此,"C转载 2017-07-10 18:39:09 · 323 阅读 · 0 评论 -
我所偏爱的 C 语言面向对象编程范式
面向对象编程不是银弹。大部分场合,我对面向对象的使用非常谨慎,能不用则不用。相关的讨论就不展开了。但是,某些场合下,采用面向对象的确是比较好的方案。比如 UI 框架,又比如 3d 渲染引擎中的场景管理。C 语言对面向对象编程并没有原生支持,但没有原生支持并不等于不适合用 C 写面向对象程序。反而,我们对具体实现方式有更多的选择。大部分用 C 写面向对象程序的程序员受 C++ 影响颇深。企图转载 2017-07-21 10:01:29 · 344 阅读 · 0 评论 -
C语言和设计模式(之开篇)
关于软件设计方面的书很多,比如《重构》,比如《设计模式》。至于软件开发方式,那就更多了,什么极限编程、精益方法、敏捷方法。随着时间的推移,很多的方法又会被重新提出来。 其实,就我个人看来,不管什么方法都离不开人。一个人写不出二叉树,你怎么让他写?敏捷吗?你写一行,我写一行。还是迭代?写三行,删掉两行,再写三行。项目的成功是偶然的,但是项目的失败却有很多原因,管理混乱、需求混乱转载 2017-07-25 09:43:06 · 1384 阅读 · 0 评论 -
keil 下 malloc的使用
一直以来,我在写arm程序的时候,都是避免使用malloc函数。这一次要用yaffs文件系统,没有办法只好研究一下malloc函数。 要用malloc函数需要指定堆栈的位置和大小,我的硬件环境中有SDRAM,所以我想让malloc函数在sdram中分配空间,首先要指定堆栈的开始地址。在keil中打开系统的sct文件,在我硬件环境中时Emc_Yaffs.sct,其内容如下:LR_IROM1 ...转载 2018-03-27 09:44:00 · 7397 阅读 · 1 评论 -
sprintf函数、snprintf函数、asprintf函数、vsprintf
sprintf函数:功能把格式化的数据写入某个字符串缓冲区。头文件stdio.h原型int sprintf( char *buffer, const char *format, [ argument] … );参数列表buffer:char型指针,指向将要写入的字符串的缓冲区。format:格式化字符串。[argument]...:可选参数,可以是任何类型的...转载 2019-05-22 19:57:56 · 1562 阅读 · 0 评论 -
关于编译器提示a declaration cannot have a label的解决方法
最近在编程时遇到这样的一个问题,我在case 下面定义一个变量,然而程序在编译的时候报警,发现编译器提示a declaration cannot have a label ,问题代码如下所示:switch(msg){ case XXX: uint8_t i = 0; ..... break; .....}1234567转载 2017-06-08 19:28:12 · 1524 阅读 · 0 评论 -
wordexp函数学习
GNU C LIB 库中有模式匹配这一章,除了威力非凡的正则表达式, Shell-Style Word Expansion 也是其中一节,介绍了另外一种模式匹配的思路。简单的说就是将输入的字符串,按照单词解析成一个wordexp_t类型的变量。这个变量本质是个矢量,她有we_wordc成员,表示有矢量成员的个数,换言之,就是解析成了几个单词。 注意,we_wodv这个指针数组转载 2017-05-19 19:21:11 · 2120 阅读 · 0 评论 -
C语言计算文件的md5值
google了好久都没有找到合适的,其实我只需要一个函数,能计算文件的 md5 值就好,后来找到了 md5.h 和 md5.c 的源文件,仿照别人的封装了个函数(他那个有问题,和 md5sum 计算出来的都不一样)。废话少说,直接贴 代码 : (再废一句话,如果只想计算字符串的md5值,把字符串传给 MD5Update 函数一次就好)#include "转载 2016-10-09 17:27:55 · 5372 阅读 · 0 评论 -
MD5算法分析及逆向详解
题外话:最近在看加密与解密,看到加密算法部分,感觉对于初次接触的新手还是有些难度的。故写下该篇文章,算作一个引导吧,新手飘过,老鸟勿笑。基本原理: MD5的典型应用是对一段信息(Message)产生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多软件在下载的时候都有一个文件名相同,文件扩展名为.md5的文件,在这个文件中通常只有一行文本,大致结转载 2016-10-08 09:16:24 · 3479 阅读 · 0 评论 -
getopt 和 getopt_long 函数
平时在写程序时常常需要对命令行参数进行处理,当命令行参数个数较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现。在Linux中,我们可以使用getopt、getopt_long、getopt_long_only来对这个问题进行处理。[cpp] view plain copy转载 2016-11-30 09:42:24 · 250 阅读 · 0 评论 -
C调试方法之--------Gprofile
一、GProfile简介 GProfile是gcc的一个工具,用于对应用程序的测试。 GProfile可以分析出函数的调用次数、函数的调用关系以及函数消耗的时间。 二、GProfile原理 在编译和链接你的程序的时候,gcc 在你应用程序的每个函数中都加入了一个名为mcount ( or "_mcount" , or "__mc转载 2016-12-02 09:40:16 · 699 阅读 · 0 评论 -
使用Notepad++实现批量将ANSI转成为UTF-8编码
http://blog.sina.com.cn/s/blog_5f4150730101b3ok.html使用Trados2011翻译英文html后,如果是单个文件,可在另存译文时选择Encoding为utf8,但是项目文件导出时却没有选项可以实现编码的转换。 方案:可使用Notepad++实现 选择Plugins->Plugin Manager->Sho转载 2017-02-21 09:47:05 · 24986 阅读 · 2 评论 -
linux内核环形缓冲区
循环缓冲区在一些竞争问题上提供了一种免锁的机制,免锁的前提是,生产者和消费 都只有一个的情况下,否则也要加锁。下面就内核中提取出来,而经过修改后的fifo进 行简要的分析。 先看其只要数据结构: struct my_fifo { unsignedchar *buffer;/* the buffer holding the data*/ unsignedint si转载 2017-02-23 14:16:39 · 2934 阅读 · 0 评论 -
结构体中四字节对齐的详解
一 四字节对齐的规则C++中结构体变量的存储为什么有个4字节对齐的规则,这里是假设32位机器上,CPU在读取内存数据的时候4字节对齐会取得更快的速度;这是因为:1字节8位,4字节正好32位,而32位机器的寄存器,地址什么的都是32位的,正好一次处理就完成。二 相关内容解释例如,下面的结构各成员空间分配情况:[cpp] view plain转载 2017-03-17 18:34:45 · 8680 阅读 · 0 评论 -
crc8 c语言源程序
crc8 c语言源程序(作者:gliethttp)uint8 xCal_crc(uint8 *ptr,uint32 len){uint8 crc; uint8 i; crc = 0; while(len--) { crc ^= *ptr++; for(i = 0;i { if(c转载 2017-04-14 17:17:00 · 3173 阅读 · 0 评论 -
十六进制与字符串之间互转
下面是函数:// 字节数据转换为可打印字符串// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} --> "C8329BFD0E01"// 输入: pSrc - 源数据指针// nSrcLength - 源数据长度// 输出: pDst - 目标字符串指针// 返回: 目标字符串长度int bytes2HexStr(unsi转载 2016-09-14 11:33:52 · 688 阅读 · 0 评论