
C/C++
文章平均质量分 94
颇锐克
Graphics, GPU, device driver,Android Framwork
展开
-
fopen()
1.2 文件的输入输出函数 键盘、显示器、打印机、磁盘驱动器等逻辑设备, 其输入输出都可以通过文件管理的方法来完成。而在编程时使用最多的要算是磁盘文件, 因此本节主要以磁盘文件为主, 详细介绍Turbo C2.0提供的文件操作函数, 当然这些对文件的操作函数也适合于非磁盘文件的情况。 另外, Turbo C2.0提供了两类关于文件的函数。一类称做标准文件函数也称缓冲型文件函数,转载 2015-12-16 10:52:30 · 915 阅读 · 0 评论 -
LLVM VS GCC
1.1 LLVM是什么LLVM是什么?这是一个虽然基础,但是也曾经让很多新入门的人迷惑的一个问题。从字面上来讲,LLVM(Low Level Virtual Machine)是一个底层虚拟机,LLVM曾经有一部分功能对虚拟机有所帮助。但是现在,LLVM所代表的基本和虚拟机没有关系了,也不在作为一个缩写使用了,而是直接作为一个名字使用。那么LLVM到底是什么?LLVM可以被看作是一系列的转载 2017-05-01 13:40:18 · 7738 阅读 · 0 评论 -
段错误原因分析和查找
http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多、花费时间最长的问题就是著名的“段错误”(Segmentation Fault)。借此机会系统学习了一下,这里对Linux环境转载 2017-04-21 16:54:35 · 2921 阅读 · 0 评论 -
JNI 使用简介
目录(?)[+]简介项目决定移植一款C++开源项目到Android平台,开始对JNI深入研究。JNI是什么?JNI(JavaNative Interface)意为Java本地调用,它允许Java代码和其他语言写的代码进行交互,简单的说,一种在Java虚拟机控制下执行代码的标准机制。NDK是什么?Android NDK(Native Development Kit转载 2017-05-28 10:14:30 · 568 阅读 · 0 评论 -
android 原子操作
代码的实现位于文件system/core/include/cutils中http://androidxref.com/4.4.3_r1.1/xref/system/core/include/cutils/atomic.h 1617#ifndef ANDROID_CUTILS_ATOMIC_H18#define ANDROID_CUTILS_ATOMIC_H1920转载 2017-06-16 16:34:59 · 1630 阅读 · 0 评论 -
GCC __builtin_expect的作用
将流水线引入cpu,可以提高cpu的效率。更简单的说,让cpu可以预先取出下一条指令,可以提供cpu的效率。如下图所示:+--------------------------------|取指令 | 执行指令 | 输出结果+--------------------------------| | 取指令 | 执行+-----------------转载 2017-06-19 15:54:00 · 493 阅读 · 0 评论 -
Android IBinder的linkToDeath介绍及情景模拟
最近查看Framework源码的时候,读到了AudioService处理音量的流程,在这里碰到了IBinder的linkToDeath()这个知识点,比较感兴趣,所以记录下来,并自己写demo尝试了一下。我们简单来看下AudioService处理静音这一块。 /frameworks/base/media/Java/Android/media/AudioManager.javapubli转载 2017-06-08 13:35:32 · 731 阅读 · 0 评论 -
C++中成员变量加上static或const关键字后的分析
C++中类成员变量加上static或const关键字后的初始化问题。在一个简单的C++类中定义如下这些变量:[cpp] view plain copy #include using namespace std; class TestVariable{ public: TestVariable(){} private:转载 2017-06-30 16:58:34 · 560 阅读 · 0 评论 -
STL set
1.关于setC++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等,在封装这些数据结构的时候,STL按照程序员的使用习惯,以成员函数方式提供的常用操作,如:插入、排序、删除、查找等。让用户转载 2017-06-24 15:04:50 · 309 阅读 · 0 评论 -
C++ 类的多重继承
1.多继承多继承是指一个子类继承多个父类。多继承对父类的个数没有限制,继承方式可以是公共继承、保护继承和私有继承,不写继承方式,默认是private继承多继承举例:#include #include #include using namespace std;/** * 定义工人类: Worker * 数据成员: m_str转载 2017-11-28 12:46:26 · 1779 阅读 · 0 评论 -
C++ : 与::的使用
转载于:http://fengqing888.blog.163.com/blog/static/3301141620100623933512/1.冒号(:)用法(1)表示机构内位域的定义(即该变量占几个bit空间)typedef struct _XXX{unsigned char a:4;unsigned char c;} ; XXX(2)构转载 2017-11-28 13:52:01 · 404 阅读 · 0 评论 -
C++ virtual 使用
Virtual是C++ OO机制中很重要的一个关键字。只要是学过C++的人都知道在类Base中加了Virtual关键字的函数就是虚拟函数(例如函数print),于是在Base的派生类Derived中就可以通过重写虚拟函数来实现对基类虚拟函数的覆盖。当基类Base的指针point指向派生类Derived的对象时,对point的print函数的调用实际上是调用了Derived的print函数而不是Ba转载 2017-11-28 14:19:12 · 521 阅读 · 0 评论 -
strcpy ,strncpy ,strlcpy和snprintf的使用
strcpy ,strncpy ,strlcpy的用法好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。1. strcpystrcpy 是依据 /0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。strcpy 常规的实现代码如下(来自 OpenBSD 3.9):原创 2016-10-03 10:54:26 · 2062 阅读 · 0 评论 -
关于typedef的用法总结
不管实在C还是C++代码中,typedef这个词都不少见,当然出现频率较高的还是在C代码中。typedef与#define有些相似,但更多的是不同,特别是在一些复杂的用法上,就完全不同了,看了网上一些C/C++的学习者的博客,其中有一篇关于typedef的总结还是很不错,由于总结的很好,我就不加修改的引用过来了,以下是引用的内容(红色部分是我自己写的内容)。用途一:定义一种类型的别名,而不转载 2016-10-24 19:58:43 · 272 阅读 · 0 评论 -
虚函数、虚基类、抽象类
一:虚基类解决二义性,防止双份拷贝间接基类。(否则得用作用域分辨符来区分进行的多个拷贝)将共同基类设置为虚函数,这是从不同的路径继承过来的同名数据成员在内存中就只有一个拷贝,同一个函数名也只有一个映射。虚基类的声明是在派生类的定义过程中进行的,语法形式为:class 派生类名:virtual继承方式 基类名虚基类及派生类的构造函数,例如:#includeusingnam转载 2016-10-24 19:43:29 · 3108 阅读 · 0 评论 -
snaprintf
int snprintf(char *restrict buf, size_t n, const char * restrict format, ...);函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n的话,将不会溢出。函数返回值:若成功则返回欲写入的字符串长度,若出错则返回负值。Result1(推荐的用法)#include转载 2015-12-16 10:55:09 · 310 阅读 · 0 评论 -
strcmp
头文件:#include strcmp() 用来比较字符串(区分大小写),其原型为: int strcmp(const char *s1, const char *s2);【参数】s1, s2 为需要比较的两个字符串。字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0转载 2015-12-16 11:07:21 · 338 阅读 · 0 评论 -
fgets
来说一说fgets(..)函数。 原型 char * fgets(char * s, int n,FILE *stream); 参数: s: 字符型指针,指向存储读入数据的缓冲区的地址。 n: 从流中读入n-1个字符 stream : 指向读取的流。 返回值: 1. 当n转载 2015-12-16 11:03:34 · 3666 阅读 · 0 评论 -
ARM寻址方式及相关指令汇总
1、寻址方式所谓寻址方式就是处理器根据指令中给出的地址信息来寻找物理地址的方式。(1)立即寻址也叫立即数寻址,这是一种特殊的寻址方式,操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即寻址。例如以下指令:[plain] view plaincopyADD R0,R0,#1 ;R0←R0+1 ADD R转载 2015-12-04 09:30:24 · 1038 阅读 · 0 评论 -
回调函数
什么是回调函数简而言之,回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。为什么要使用回调函数 因为使用回调函数可以把调用者和被调用者分开,调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。回调函数就好像是一个中断转载 2015-12-04 09:16:55 · 481 阅读 · 0 评论 -
堆和栈
堆和栈的区别一、程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(st转载 2015-12-04 09:26:19 · 321 阅读 · 0 评论 -
thread 源码分析
线程是程序的一个执行流程,Java虚拟机允许多个线程同时并发执行。1. 构造方法Java代码 public Thread() { init(null, null, "Thread-" + nextThreadNum(), 0); } // target - 任务 public Thread(Runnable target) { ini转载 2015-12-08 15:36:17 · 339 阅读 · 0 评论 -
abdroid hwui
Android 4.4 Graphic系统详解(4)HWUI概述2015-01-28 17:48 2360人阅读 评论(0)收藏 举报分类: android graphic(7) 目录(?)[+]1 概述Android从3.0(API Level 11)开始,在绘制View的时候支持硬件加速,充分利用GPU的特转载 2015-12-09 21:10:36 · 1161 阅读 · 0 评论 -
strace追踪多线程程序
方法一先用ps -mp pid或者top -H查出线程pid。然后strace -p pid追踪其中一个线程。方法二直接用strace -fp pid追踪进程下所有线转载 2015-12-08 21:03:37 · 9634 阅读 · 0 评论 -
code 编译过程
程序编译程序的编译过程如下图所示,分为预处理、编译、汇编、链接等几个阶段。预处理:预处理相当于根据预处理命令组装成新的C程序,不过常以i为扩展名。编译: 将得到的i文件翻译成汇编代码。s文件。汇编: 将汇编文件翻译成机器指令,并打包成可重定位目标程序的O文件。该文件是二进制文件,字节编码是机器指令。链接: 将引用的其他O文件并入到我们程序所在的o文件中,处转载 2016-05-02 16:28:32 · 520 阅读 · 0 评论 -
struct结构体的大小计算:
struct结构体的大小计算:struct 大小,与pack的大小(在程序中显示设置#pragma pack(),vc6.0默认大小为8)、结构中最大占用有关struct A{ int a; 0-3 4-7 要填充(padding)以保证内存对齐的原则 double b; 8-15 char c[9]; 16-24};转载 2016-09-25 15:58:22 · 752 阅读 · 0 评论 -
list 链表及list_add_tail 双向链表实现分析
前几天找实习的时候,一个面试官给我留了一个题,做一个链表demo,要求实现创建、插入、删除等操作。链表是一种常见的数据结构,它是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。转载 2018-01-08 15:07:59 · 1865 阅读 · 0 评论