
c/c++
文章平均质量分 64
iteye_13558
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内存屏障
处理器的乱序和并发执行目前的高级处理器,为了提高内部逻辑元件的利用率以提高运行速度,通常会采用多指令发射、乱序执行等各种措施。现在普遍使用的一些超标量处理器通常能够在一个指令周期内并发执行多条指令。处理器从L1 I-Cache预取了一批指令后,就会分析找出那些互相没有关联可以并发执行的指令,然后送到几个独立的执行单元进行并发执行。比如下面这样的代码(假定编译器不做优化):z = x...2010-02-26 11:03:28 · 391 阅读 · 0 评论 -
哈夫曼编码
本文描述在网上能够找到的最简单,最快速的哈夫曼编码。本方法不使用任何扩展动态库,比如STL或者组件。只使用简单的C函数,比如:memset,memmove,qsort,malloc,realloc和memcpy。因此,大家都会发现,理解甚至修改这个编码都是很容易的。背景哈夫曼压缩是个无损的压缩算法,一般用来压缩文本和程序文件。哈夫曼压缩属于可变代码长度算法一族。意思是个体符号(例如,文...原创 2010-02-03 16:26:34 · 232 阅读 · 0 评论 -
优化变成了忧患:String.split引发的“内存泄露”
一直赞叹Sun对待技术的严谨和优雅(bless Sun)。Sun JDK中Java库的源代码,连注释都清清楚楚、规规范范,javadoc注解的使用也一丝不苟,读起来很熟舒服。因此,在日常工作和学习中,经常读读 Java库的源代码,不亦乐乎?如果遇到诡异问题,源代码的帮助就更大了。闲话少说,回归正题。这几天,一直在为Java的“内存泄露”问题纠结。Java应用程序占用的内存在不断的、有规律的...原创 2010-02-01 17:39:02 · 204 阅读 · 0 评论 -
锁无关的(Lock-Free)数据结构——在避免死锁的同时确保线程
http://hi.baidu.com/%5F%E2%64%5F%B7%B3%5F%DE%B2%C2%D2/blog/item/32b9cecab44c4b8cc8176851.html原创 2010-01-26 14:47:21 · 153 阅读 · 0 评论 -
使用 GNU profiler 来提高代码运行速度
进应用程序的性能是一项非常耗时耗力的工作,但是究竟程序中是哪些函数消耗掉了大部分执行时间,这通常都不是非常明显的。在本文中我们将学习如何使用 gprof 为 Linux ®™ 平台上的用户空间和系统调用精确分析性能瓶颈。简介各种软件对于性能的需求可能会有很大的区别,但是很多应用程序都有非常严格的性能需求,这一点并不奇怪。电影播放器就是一个很好的例子:如果一个电影播放器只能以所需要速度的...原创 2010-01-26 13:46:03 · 132 阅读 · 0 评论 -
atoi函数不同平台的实现问题
atoi函数不同平台的实现问题 工程中要通过文件得到数值,想当然的就使用了atoi这个函数。在Windows下使用,没什么问题。但是一移植到Linux下,问题就出来了,发现得到的数总是不对劲。用gdb跟踪一下,发现大于2147483647的数均返回2147483647这个值。又在Windows下debug了一下,发现得到的数值正常,能够得到大于2147483647的数...原创 2010-01-26 11:15:22 · 171 阅读 · 0 评论 -
英文大小写引起的性能问题(值得借鉴)
最近在做的一个项目中要实现字母大小写无关比较,很自然的使用标准c库中的函数tolower(),但是由于使用次数很多,对输入的字符数组每个都要使用一次,经过性能测试,发现使用tolower函数的性能只有不使用该函数的的三分之一。 察看了一下tolower函数的源码,发现其对MT有加锁互斥操作,而做的项目正后生成的是MT库,因此性能上会有问题。因此参考tolower函数,写了一个...原创 2010-01-26 11:11:28 · 152 阅读 · 0 评论 -
C++代码优化方法总结
C++代码优化方法总结优化是一个非常大的主题,本文并不是去深入探讨性能分析理论,算法的效率,况且我也没有这个能力。我只是想把一些可以简单的应用到你的C++代码中的优化技术总结在这里,这样,当你遇到几种不同的编程策略的时候,就可以对每种策略的性能进行一个大概的估计。这也是本文的目的之所在。一. 优化之前在进行优化之前,我们首先应该做的是发现我们代码的瓶颈(bottlen...原创 2010-01-21 15:53:49 · 136 阅读 · 0 评论 -
互斥量(转
一、什么是互斥锁 另一种在多线程程序中同步访问手段是使用互斥量。程序员给某个对象加上一把“锁”,每次只允许一个线程去访问它。如果想对代码关键部分的访问进行控制,你必须在进入这段代码之前锁定一把互斥量,在完成操作之后再打开它。 互斥量函数有 pthread_mutex_init 初始化一个互斥量 pthread...原创 2010-01-21 15:00:30 · 160 阅读 · 0 评论 -
提高 Linux 上 socket 性能
提高 Linux 上 socket 性能加速网络应用程序的 4 种方法 developerWorks 文档选项 将打印机的版面设置成横向打印模式 打印本页 将此页作为电子邮件发送 将此页作为电子邮件发送级别: 中级M. Tim Jones (mtj@mtjones.com), 资深软件工程师, Emulex2006 年 ...原创 2010-01-21 14:46:27 · 91 阅读 · 0 评论 -
C语言、系统级编程应该会的
C语言宏定义技巧(zt)1,防止一个头文件被重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif2,重新定义一些类型,防止由于各种平台和编译器的不同,而产生的类型字节数差异,方便移植。typedef unsigned char boolean; /* Boolean value...原创 2010-01-21 14:36:52 · 146 阅读 · 0 评论 -
溢出的经典文章:Smashing The Stack For Fun And Profit
译文]Smashing The Stack For Fun And Profit2000年12月20原作 by Aleph One[email]aleph1@underground.org[/email]翻译 [email]xuzq@chinasafer.com[/email][url]www.chinasafer.com[/url]'践踏堆栈'[C语言...原创 2010-01-21 14:32:53 · 153 阅读 · 0 评论 -
出现频率最高的笔试题strcpy写法
题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char * ...原创 2010-01-21 14:30:21 · 122 阅读 · 0 评论 -
strcmp()的源码
int strcmp(const char *s1, const char*s2) { char* p1; char* p2; p1=s1; p2=s2; while((*p1)&&(*p2)) { if(*p1==*p2) ...原创 2010-01-21 14:29:36 · 210 阅读 · 0 评论 -
好的博客
http://blog.youkuaiyun.com/embeddedsoft原创 2010-01-21 14:15:55 · 106 阅读 · 0 评论 -
linux线程池及其测试
/*-------------------------------------------------------------------------* tpool.h – 线程池定义* -------------------------------------------------------------------------*/#ifndef _TPOOL_H_#def...原创 2010-02-03 16:32:09 · 152 阅读 · 0 评论 -
可重入函数与不可重入函数
原文地址:http://blog.chinaunix.net/u/25994/showart_369466.html可重入函数与不可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;而不可重入的函数由于使用了一些系统资源,比如全局变量区,中断向量表等,...原创 2010-02-03 16:35:36 · 385 阅读 · 0 评论 -
函数调用堆栈分析
理解调用栈最重要的两点是:栈的结构,EBP寄存器的作用。首先要认识到这样两个事实:1、一个函数调用动作可分解为:零到多个PUSH指令(用于参数入栈),一个CALL指令。CALL指令内部其实还暗含了一个将返回地址(即CALL指令下一条指令的地址)压栈的动作。2、几乎所有本地编译器都会在每个函数体之前插入类似如下指令:PUSH EBP; MOV EBP ESP;即,在程...2010-02-26 10:53:04 · 137 阅读 · 0 评论 -
mtrace检测内存泄露
[url]http://math.acadiau.ca/ACMMaC/howtos/mtrace.html[/url]2010-02-25 09:50:37 · 133 阅读 · 0 评论 -
c语言编程之字符串操作
[code="java"] 1. //在s串中查找与s1相匹配的字符串,找到后用s2将s中与s1相配的串替换掉 2. #include 3. #include 4. 5. void replace(char *s,char *s1,char *s2); 6. 7. int main(int argc,char *a...2010-02-25 09:41:05 · 163 阅读 · 0 评论 -
linux C 链接库 so制作及调用[转]
文章分类:C++编程[文章作者:陈毓端 若转载请标注原文链接:http://blog.woyuw.com/?p=341]最近的一个程序因为比较复杂,需要自己编写so动态链接库来给c语言程序调用。下面就简单的写下so制作到调用的整个流程。首先做个头文件head.h:C代码 1. /* 2. head.h 3. 4...2010-02-24 16:26:34 · 245 阅读 · 0 评论 -
mtrace的使用
对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时候就会遇到。Debug起来也是比较累人。其实linux系统下有一个使用的工具可以帮忙来调试的,这就是mtrace。Mtrace主要能够检测一些内存分配和泄漏的失败等。下面我们来学习一下它的用法。使用mtrace来调试程序有4个基本的步骤,需要用到GNU C 函数库里面的一些辅助的函数功能。1.在需要跟踪的程序中需要包含头...2010-02-24 16:02:20 · 634 阅读 · 1 评论 -
单片机的C语言中位操作用法(转
单片机的C语言中位操作用法作者:郭天祥 在对单处机进行编程的过程中,对位的操作是经常遇到的。C51对位的操控能力是非常强大的。从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点。这也是在各个领域中都可以看到C的重要原因。在这一节中将详细讲解C51中的位操作及其应用。1、位运算符C51提供了几种位操作符,如下表所示:运算符 ...2010-02-24 14:27:48 · 235 阅读 · 0 评论 -
Linux下的itoa函数
上篇文章说到linux需要itoa函数,下面我就提供一份跨平台的itoa函数。//return the length of result string. support only 10 radix for easy use and better performanceint my_itoa(int val, char* buf){ const int radi...原创 2010-02-21 17:55:37 · 268 阅读 · 0 评论 -
va_list、va_start、va_arg、va_end的原理与使用
1. 概述 由于在C语言中没有函数重载,解决不定数目函数参数问题变得比较麻烦;即使采用C++,如果参数个数不能确定,也很难采用函数重载.对这种情况,有些人采用指针参数来解决问题.下面就c语言中处理不定参数数目的问题进行讨论. 2. 定义 大家先看几宏. 在VC++6.0的include有一个stdarg.h头文件,有如下几个宏定义: ...原创 2010-02-05 10:34:15 · 110 阅读 · 0 评论 -
快速排序(quickSort)
[code="java"] 1. #include 2. int t, i, j, n, temp, seq[100]; 3. 4. int patition(int start, int end) 5. { 6. temp = seq[end]; 7. j = end; 8. ...原创 2010-02-04 10:50:38 · 116 阅读 · 0 评论 -
C问题---itoa函数
----------------------------------典型例题 30:C问题---itoa函数---------------------------------- 1 #include 2 #include 3 4 void itoa( int i,char* string) 5 { 6 ...原创 2010-02-04 10:36:29 · 193 阅读 · 0 评论 -
itoa函数及atoi函数
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。以下是用itoa()函数将整数转 换为字符串的一个例子:# include # include void main (void){int num = 100;char str[25];itoa(num, str, 10);printf("The number 'num' ...原创 2010-02-04 10:35:56 · 147 阅读 · 0 评论 -
结构体零长度数组的作用
在一些 C 语言编写的代码中,有时可以看到如下定义的结构:view plaincopy to clipboardprint? 1. typedef struct user_def 2. { 3. char * name; 4. int length; 5. char bytes[0]; ...原创 2010-02-04 10:21:02 · 142 阅读 · 0 评论 -
优化C代码常用的几招
性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。第一招:以空间换时间计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值:方法A:通常的办法...原创 2010-02-04 10:14:28 · 88 阅读 · 0 评论 -
我经常去的网站
MFC相关网站www.codeproject.com http://www.codeguru.com/http://www.designnews.com.cn //不错的电子设计网站http://ww.21icsearch.com/blog.asp?name=good02xaut //很不错的个人Blogwww.sourceforge.net //软件方面一切...原创 2010-02-03 17:53:36 · 301 阅读 · 0 评论 -
嵌入式系统中volatile 的使用的意义
如果一个变量的值可能会被程序操作之外的其它操作所改变,那么你必需用volatile 声明。在嵌入式系统中其它操作是:中断服务程序的操作、硬件动作的操作。用volatile声明的变量是不会被编译器优化掉的例如:#define PortA ( * ( volatile unsigned int * ) 0x0000 ) 这样 PortA 成为一个地址在0x0000的...原创 2010-01-21 14:09:13 · 137 阅读 · 0 评论 -
如何实现128字节对齐的数据结构
在很多机器上,比如Cell,要求数据结构必须128位对齐。这就对数据结构的定义提出了额外的要求。一种较直观的方法是:在数据结构中添加pad字节,使得整个数据结构填充为128位,例如:typedef struct _alf_error_msg{ int error_code; int error_type; int extra_error_code;...原创 2010-01-21 14:04:57 · 1158 阅读 · 0 评论 -
union的0x3个妙用(I)
在嵌入式系统中,一般不建议使用union结构,因为union结构中的各个成员之间存在相互影响,容易滋生问题。可见,union也是把双刃剑。懂得使用它的人可以做到“削铁如泥”,而不懂得使用它的人很可能会被其所伤。下面介绍的几种方法都是嵌入式系统常用的几种技巧。如果熟练掌握,将来定有所用。 1.all的使用 使用all的数据结构模型: typedef _my_union...原创 2010-01-21 14:04:17 · 146 阅读 · 0 评论 -
gcc生成静态库和动态库
gcc生成静态库和动态库一、库文件简介简单地说,库(Library)就是一组已经写好了的函数和变量、经过编译代码,是为了能够提高开发效率和运行效率而设计的。库分为静态库(Static Library)和共享库(Shared library)两类。静态库文件的扩展名是.a,共享库文件的扩展名是.so(在CYGWIN环境下,分别叫做.o和.dll)。共享库现在常常被叫做动态库,是由于很...原创 2010-01-14 15:05:55 · 120 阅读 · 0 评论 -
gcc生成静态库和动态库
假设当前目录下有这些源文件:[main.c func.c func.h],其中main.c要调用func.c中的函数。【1】生成静态库:$ gcc -c func.c -o func.o$ ar rcs libfunc.a func.o$ gcc main.c -o main -static -L. -lfunc$ ./main【2】生成...原创 2010-01-14 15:04:40 · 123 阅读 · 0 评论 -
C/C+调用JAVA
Java跨平台的特性使Java越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用Java开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的界面失色不少。怎么能够让通过Java开发的GUI程序不弹出Java的控制台窗口呢?其实现在很多流行的开发环境例如JBuilder、Eclipse都是使用纯Java开发的集成环境。这些集成环境启动的时候并不会打开一个命令窗...原创 2010-01-08 15:30:41 · 120 阅读 · 0 评论 -
排序算法
[code="java"] 1. #include 2. using namespace std; 3. 4. /* 5. ============================================================================= 6. 1、稳定排序和非稳定排序 ...原创 2010-01-08 15:25:54 · 90 阅读 · 0 评论 -
库函数的实现
梗概这一节新增的文件有:stdarg.h 用来处理可变参数ctype.h 判断变量一些属性。比如一个字符是不是大写,是不是数字string.h string.c 常用的关于字符串的操作vsprintf.h vsprintf.c 该节的主要文件用来实现格式化输出改变的文件有:test.c 主要用来测试 pri...原创 2010-01-08 10:38:00 · 173 阅读 · 0 评论 -
变长参数的实现
我们用的最多的C函数是哪个?毫无疑问,是printf。但是你看过printf的声明式吗,那是相当诡异。随便拿一本带C库函数参考的书,可查到如下结果: int printf(const char *format, ...);那三个连续的点就代表大于或等于0个参数,再加上前面的format参数,所以printf函数至少要接受一个字符串,后面就随便了。但是这是如何实现的呢...原创 2010-01-08 10:35:16 · 203 阅读 · 0 评论