C/C++
文章平均质量分 89
Tinus Chen
这个作者很懒,什么都没留下…
展开
-
使用freetype来显示中文汉字和英文字符
这里我们用到了freetype。进入官网http://savannah.nongnu.org/download/freetype/中下载最新的版本2.7的源代码和文件。freetype-2.7.tar.gzfreetype-doc-2.7.tar.gz首先我们在使用官方提供的程序在pc上运行一下。需要安装zlib库。在freetype-doc-2.7.tar.gz文件中的docus目录...转载 2018-04-16 15:32:31 · 5105 阅读 · 0 评论 -
可变参数的原理及实现方式
前几天看见小伙伴们发了一个面试题,题目是printf的可变参数是如何实现的?然后我就专门研究了一下,通过汇编可以知道他们的实现步骤。下面我们通过汇编来带大家了解下他们的输出结果到底是多少。printf("int %d, %d\n", 10, a);这个大家应该都知道输出的是多少,他们的结果是10, 0.那么,这个可变参的函数编译器是怎么确定的,为什么printf可以有任意的长度的...原创 2019-03-15 11:33:57 · 1751 阅读 · 0 评论 -
给定头结点和指定结点,删除指定结点在时间复杂度为O(1)
给定链表的头指针和一个结点指针,在O(1)时间删除该结点。链表结点的定义如下:struct ListNode { int m_data; ListNode* m_pNext; };函数的声明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);一般单链表删除某个节点,需要知道删...原创 2019-03-02 22:05:22 · 687 阅读 · 0 评论 -
数据结构笔记:二叉树单度节点删除
编写一个函数用于删除二叉树中度为1的所有节点。要求:节点删除后,其唯一的子节点替代它的位置。如下:代码如下,如有问题请指出,谢谢指导:typedef struct _tag_BTreeNode BTreeNode;struct _tag_BTreeNode{ int data; BTreeNode* left; BTreeNode* right;};vo...原创 2019-03-02 20:59:01 · 478 阅读 · 1 评论 -
函数调用约定cdecl、stdcall、fastcall
我们在编写代码的时候都会调用函数,有点函数有多个参数,例如:int test(int a,char b, char* c);上面的函数调用方式是test(10, ‘c’, “tinus”);那么这个函数编译器是怎么知道有多少个参数,参数类型是什么了?因为函数调用时,调用者依次把参数压栈,然后调用函数,函数被调用以后,在堆栈中取得数据,并进行计算。函数计算结束以后,或者调用者、或者函数本身...原创 2019-03-01 13:34:35 · 804 阅读 · 0 评论 -
C代码优化方案
1、选择合适的算法和数据结构目录1、选择合适的算法和数据结构2、使用尽量小的数据类型3、减少运算的强度4、结构体成员的布局5、循环优化6、提高CPU的并行性7、循环不变计算8、函数优化9、采用递归10、变量11、使用嵌套的if结构1、选择合适的算法和数据结构选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使...转载 2019-01-31 15:46:05 · 756 阅读 · 0 评论 -
Linux平台延时之sleep、usleep、nanosleep、select
1、sleep的精度是秒2、usleep的精度是微妙,不精确3、select的精度是微妙,精确struct timevaldelay;delay.tv_sec =0;delay.tv_usec =20 * 1000; // 20 msselect(0, NULL,NULL, NULL, &delay); 4、nanosleep的精度是纳秒,不精确 ...原创 2018-11-23 10:21:04 · 516 阅读 · 0 评论 -
Linux 下几款程序内存泄漏检查工具
1.内存管理是否正确(因为这个程序本身开辟很多内存空间进行缓存管理,同时这个程序程序本身就是基于C/C++开发的,内存管理机制一直是程序员头痛的东西) 2.程序的健硕性如何(服务器任何程序的基本要求就是要满足高并发的要求,也就是说,如果达不到这个基本要求,程序并并不能成为服务器)针对第一点,以下将介绍几款内存泄漏检查工具工具 描述 valgrind 一个强大开源的程序检测工...转载 2018-08-21 09:24:18 · 4778 阅读 · 0 评论 -
gcc不链接未使用函数
在一个源文件中,里面有很多函数,但是main函数没有全部调用,未使用的函数也会被编译,也会被“打包”到最后的可执行文件中,要去除掉不要的函数,方法如下:1.执行gcc -function-sections <name.c>。其中-function-sections的意思是,将不同函数编译到不同的section上面。如果没有这个选项,所有的函数都会编译到一个section上面,于是函...原创 2018-08-20 10:03:39 · 5874 阅读 · 0 评论 -
内存泄漏的问题如何解决
1、valgrind,这是非常好用的工具,虽然参数很多,输出结果较多,但是只要认真看下,就很容易发现问题,报告是很详细的,不要被吓倒。valgrind检测的内存泄漏是非常准的,可以精确定位到代码行甚至是变量。valgrind基于valginrd core框架,这是个非常有强大的框架,他的作用不仅仅在于检测内存泄漏的,强烈建议测试新手通读下全部的文档。valgind自己也会有误报和漏报,所有具体场...转载 2018-08-16 09:36:55 · 1246 阅读 · 0 评论 -
内存溢出和内存泄漏的区别、产生原因以及解决方案
内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。memory leak会最终会导...转载 2018-08-13 09:27:56 · 243 阅读 · 0 评论 -
C语言的程序文件中,完全没有调用过的函数会不会被编译?
自己写的而且没被调用的函数(注意不包括没有specialized的模板),如果不是inline或static,都会被编译,因为编译分两步,首先每个translation unit都会被编译为o file,然后所有o file会被链接成目标文件。而目标文件不一定是可执行程序,也可以是动态链接库,这个时候那些没被用过的函数当然要留下,因为如果是动态链接库那么它在未来任何时候都有可能被另一个程序链接,所...原创 2018-08-14 15:18:59 · 9137 阅读 · 2 评论 -
gcc 编译选项
摘自http://blog.csdn.net/liuchao1986105/article/details/6674822版本] -0.13 [声明] 这篇文档是我的关于gcc参数的笔记,我很怀念dos年代我用小本子,纪录任何的dos 命令的参数.哈哈,下面的东西可能也不是很全面,我参考了很多的书,和gcc的帮助.不全的原因是,有可能我还没有看到这个参数,另一种原因是,我可能还不会用他...转载 2018-07-18 09:47:11 · 850 阅读 · 0 评论 -
负数和正数的存储方式。
今天被老大教育了一遍,一直以为是我对的。果然我老大还是我老大。受教了:,以下转载。本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念....转载 2018-07-11 17:11:51 · 3716 阅读 · 0 评论 -
C语言函数sscanf()的用法
C语言函数sscanf()的用法sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,...转载 2018-04-04 16:12:30 · 144 阅读 · 0 评论 -
linux c/c++ GDB教程详解
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。一般来说,GDB主要帮忙你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程...转载 2018-04-04 16:07:03 · 2897 阅读 · 0 评论 -
信号量与条件变量的区别
注意信号量与条件变量的区别信号量内容可见:http://www.cnblogs.com/charlesblc/p/6142868.html 信号量、共享内存,以及消息队列等System V IPC三剑客主要关注进程间通信;而条件变量、互斥锁,主要关注线程间通信。 下面内容参考:http://blog.chinaunix.net/uid-27164517-id-3282242转载 2018-04-11 18:15:35 · 1308 阅读 · 0 评论 -
C语言学习笔记:atol和strtol的区别
atol和strtol的区别 字符串中有两个重要的函数:atol和strtol,它们的功能都是字符数组,转数值。但是用法差异较大。我们下面来说一下这两个函数在具体使用的时候要注意哪些方面。 首先,说atol。 这个函数定义为:long atol(const char* s); 就是输入一个字符数组(注意,不是string类型的字...原创 2018-04-04 13:57:52 · 2904 阅读 · 0 评论 -
printf函数进行a++和++a等操作的实现原理。
最近在看函数调用的时候突发奇想了几个用例,想证明一下结果,具体的例子如下: int a = 0; int b = 1; printf("tinus : %d %d\n", a, b); printf("tinus : %d %d\n", a++, b++); printf("tinus : %d %d\n", a++, a++); printf("tinus : %d %d\n"...原创 2019-03-15 23:11:51 · 5649 阅读 · 3 评论