自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)

原创 Android学习总结(一)

1:Android中五种数据存储方式分别是什么?他们的特点?    (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使            用,生成XML的格式存放在设备中    (2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库    (3) File文件,通过读取写入方式生成文件存放数据    (4) Content

2015-09-24 15:14:06 332

原创 随机数、随机函数、大数随机及等概率探讨

近日在做一个入职练习中,我遇到了随机数的问题,将分析过程做些整理。        本文主要讨论大范围内随机数的产生办法,讨论在随机范围内的等概率问题。        一、要求        1、产生一个比较大的随机数。        2、产生的随机数在随机范围内等概率。        二、知识背景        我们知道在C语言中有 rand

2015-09-14 18:17:32 437

原创 应用 Valgrind 发现 Linux 程序的内存问题

简介: 如何定位应用程序开发中的内存问题,一直是 Linux 应用程序开发中的瓶颈所在。有一款非常优秀的 linux 下开源的内存问题检测工具:valgrind,能够极大的帮助你解决上述问题。掌握 valgrind 的使用以及工作原理,能够有效地定位进而避免应用开发中的内存问题。Valgrind 概述体系结构Valgrind是一套Linux下,开放源代码(GPL V2)的仿

2015-09-14 18:16:33 290

原创 如何在linux下检测内存泄漏

简介: 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨。其中包括 C++ 中的 new 和 delete 的基本原理,内存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题。作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体(Mutex)类。1.开发背景在 windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下

2015-09-14 18:15:38 252

原创 Linux多线程编程

——本文一个例子展开,介绍Linux下面线程的操作、多线程的同步和互斥。前言线程?为什么有了进程还需要线程呢,他们有什么区别?使用线程有什么优势呢?还有多线程编程的一些细节问题,如线程之间怎样同步、互斥,这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题:是否熟悉POSIX多线程编程技术?如熟悉,编写程序完成如下功能:1)有一int型全局变量g_Flag初始值

2015-09-14 18:14:39 274

原创 Linux下的Socket编程

"一切皆Socket!"话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket。——有感于实际编程和开源项目研究。我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web 服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类

2015-09-14 18:13:56 281

原创 为bash添加内置命令(built-in)的方法

在bash命令行工作中,为常用的操作编写一个脚本或外部命令是很容易的。事实上自己添加一条内置命令(built-in)也并不难。内置命令比脚本和外部命令的执行效率更高,还可以访问脚本和外部命令无法深入的bash内部,只是可移植性下降了。   GNU bash的源代码结构较为清晰。源代码目录(记为$(srcdir))下的builtins目录存储的是各个内置命令的源代码预定义文件(*.def)。

2015-09-14 18:12:03 485

原创 说说计算机中的异常

开篇异常这个名词应该大家都不陌生,很多人都听说过。系统调用知道吧?其实系统调用也是一种异常。但是具体的什么是异常呢?他在计算机中有什么作用?他是如何工作,如何被我们利用的?我想很多人都还不都是很清楚。、了解异常有诸多好处,可以让你更好的理解操作系统和应用程序的交互,更好的理解并发等。所以今天就简单的来说一下异常。 注:本博文图片来源《Computer system-

2015-09-14 18:11:28 388

原创 GCC编译的背后( 预处理和编译 汇编和链接 )

平时在Linux下写代码,直接用"gcc -o out in.c"就把代码编译好了,但是这后面到底做了什么事情呢?如果学习过编译原理则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链 接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。

2015-09-14 18:10:36 518

原创 系统调用、POSIX、C库、系统命令和内核函数

摘要:《Linux内核修炼之道》第5章讲解系统调用,它是应用程序和内核间的桥梁,学习并理解它是我们走向内核的一个很好的过渡。本节为大家介绍系统调用、POSIX、C库、系统命令和内核函数。 5.1.1  系统调用、POSIX、C库、系统命令和内核函数(1)系统调用和POSIX。系统调用虽然是内核和用户应用程序之间的沟通桥梁,是用户应用程序访问内核的入口点,但通常情况下,应用程

2015-09-14 18:09:52 466

原创 linux常用的makefile模版编写

linux常用的makefile模版编写在linux下面,我们不得不自己写makefile,makefile的确博大精深,但是实际上对于日常的使用来说,无非就是 1:编译可执行程序。2:编译lib库 3:编译so库 本博针对上面三种目的各自写出了makefile模版,希望对大家有所帮助。 一.编译可执行程序 当前目录下制定文件编译成可执行文件(连接外部库的话只需要更改INC

2015-09-14 18:08:55 243

原创 linux下C程序printf没有立即输出的问题及我的Makefile文件

昨天在linux下运行一个C程序,是处理一段视频中的每一帧的,本来在程序中是要每处理完一帧就要输出一条信息的,但是在运行是却不显示,而是在程序运行完成之后一块输出的,但是在windows中运行程序就没有这个问题。如果是这样的话,就非常不爽了,因为本来是想通过程序的输出来得到程序当前的运行状况,现在却达不到这种效果。然后上网上搜索了一下,看来果然有解决方案。存在这个问题的主要原因就是在调用print

2015-09-14 18:08:21 1451

原创 C中计算程序运行时间差(毫秒级)

最近在跑一些程序,需要计算程序运行的时间,然后搜索了一下相关的材料,发现下面的一个比较好的方法,可以实现毫秒级的计时: #include #if defined(WIN32)# define  TIMEB    _timeb# define  ftime    _ftime#else#define TIMEB timeb#endiftime_t 

2015-09-14 18:07:34 1519

原创 struct内存对齐:gcc与VC的差别

内存对齐是编译器为了便于CPU快速访问而采用的一项技术,对于不同的编译器有不同的处理方法。Win32平台下的微软VC编译器在默认情况下采用如下的对齐规则: 任何基本数据类型T的对齐模数就是T的大小,即sizeof(T)。比如对于double类型(8字节),就要求该类型数据的地址总是8的倍数,而char类型数据(1字节)则可以从任何一个地址开始。Linux下的GCC奉行的是另外一套规则:任何

2015-09-14 18:07:01 538

原创 gcc中常用的选项

开始学习在Linux下写程序,利用gcc进行编译的时候经常需要添加一些选项,为了便于查找,将这写常用的选项整理出来。GCC常用选项    -c 通知GCC取消链接步骤,即编译源码并在最后生成目标文件;    -Dmacro 定义指定的宏,使它能够通过源码中的#ifdef进行检验;    -E 不经过编译预处理程序的输出而输送至标准输出;    -g3 获得有关调试程序的详细

2015-09-14 18:06:23 271

原创 main函数可否被递归调用

在C和C++中是不同的,我们知道C语言比较宽松、灵活,而C++的目标就是改变C语言比较宽松的特点,实行了比较严格的做法,包括严格的类型检查等等。实际上,在C语言中,main函数可被递归调用,而在C++标准中,main函数不可以被递归调用。C中递归调用: (参考:http://blog.csdn.net/songkexin/article/details/1842654#reply)

2015-09-14 18:05:45 2506

原创 C语言中将结构体写入文件

可以使用fwrite()将一个结构体写入文件:  fwrite(&some_struct,sizeof somestruct,1,fp);对应的fread函数可以再把它读出来,此处fwrite受到一个结构的指针并把这个结构的内存映像作为字节流写入文件。sizeof操作符计算出结构占用的字节数。但是这样用内存映像写出的数据文件却是不能够移植的,尤其是当结构中包含浮点成员或指针的时候。结构

2015-09-14 18:05:00 12156

原创 C中数组与指针及多维数组

C中的字符串数组与字符串指针的区别从上面的截图,我们可以看到字符数组和字符串的差别。他们的类型是不同的,比如上面的代码中,filename的类型是char[12],而pname的类型是char*,&filename的结果是数组指针,图中显示的是char[12]*。还可以发现,对于pname和p虽然是两个不同的指针,但是他们都指向同一个地址,这也是编译器投机取巧的地方

2015-09-14 18:04:11 257

原创 浮点数在内存中的表示

c语言中的浮点数在内存中的表示(VC++编译器中):char:1个字节short:2个字节int:4字节long:4字节float:4字节(单精度)double:8字节(双精度) 参考:http://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html无论是单精度还是

2015-09-14 18:03:41 296

原创 C/C++语言中const的用法

1. const 在C和C++中的区别C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所以在C++中const修饰的量可以用在数组的定义中。而在C中,const是一个不能被改变的普通变量,既然是变量,就要占用存储空间,所以编译器不知道编译时的值.而且,数组定义时的下标必须为常量.

2015-09-14 18:02:51 237

原创 C/C++一些问题的理解

1. 关键字volatile有什么含意?并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:(1)并行设备的硬件寄存器(如:状态寄存器)(2)一个中断服务

2015-09-14 18:02:05 195

原创 编译器发展及其相关介绍

编译器的发展:上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。与此同时,Noam Chomsky开始了他对自然语言结构的研究。他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。

2015-09-14 18:01:25 355

原创 纯线性同余随机数生成器

线性同余随机数生成器介绍:古老的LCG(linear congruential generator)代表了最好最朴素的伪随机数产生器算法。主要原因是容易理解,容易实现,而且速度快。 LCG 算法数学上基于公式:X(n+1) = (a * X(n) + c) % m其中,各系数为:模m, m > 0系数a, 0 增量c, 0 原始值(种子) 0

2015-09-14 18:00:20 605

原创 C语言中函数参数入栈的顺序

C语言中函数参数入栈的顺序先通过一个小程序来看一看:#includevoid foo(int x, int y, int z){printf("x = %d at [%X]n", x, &x);printf("y = %d at [%X]n", y, &y);printf("z = %d at [%X]n", z, &z);}int main(int a

2015-09-14 17:59:40 227

原创 检测内存泄漏

网上搜索了一下,发现检测内存泄漏的工具还是很多的。下面是从网上找到的一些材料,主要是在linux系统中内存泄漏的检测方法。(1)什么是内存内存泄漏?  在此,谈论的是程序设计中内存泄漏和错误的问题,不过,并不是所有的程序都有这一问题。首先,泄漏等一些内存方面的问题在有的程序语言中是不容易发生的。这些程序语言一般都认为内存管理太重要了,所以不能由程序员来处理,最好还是由程序语言设计者来处

2015-09-14 17:58:23 218

原创 可以输出自己的源程序代码(quine)

Quine 以哲学家 Willard van Orman Quine (1908-2000) 而命名,表示一个可以生成他自己的完全的源代码的程序。编写出某个语言中最简短的 quine 通常作为黑客们的消遣。作为真正的 quine ,有一些约定:程序不能接受输入或者是打开文件,因为那样就可以直接输入源代码或者是把源代码文件直接打开再重新打印出来,就没有什么意思了;同时,一个完全空白的程序(产

2015-09-14 17:57:47 1198

原创 C语言中常用宏定义

下面是一些比较重要的宏定义,记录一下:assert断言: #define assert(cond) ((cond)?(void)0:_assert(#cond,__FILE__,__LINE__))void _assert(char*cond,char*filename,long lineno){printf("assert:%s in file:%s, at line

2015-09-14 17:57:04 465

原创 内联函数的使用及注意点

内联函数并不总是内联 Inline function是在C++中引入的一种机制,它可以拓展函数代码,避免调用函数的额外开销。在Linux环境下,gcc编译选项必须加上优化选项才能使inline有效。inline与static的关系在这儿有一个比较详细的分析:http://www.cnblogs.com/xkfz007/articles/2370640.html内联函数(in

2015-09-14 17:56:21 475

原创 C代码优化的一些方法

C代码优化方案1. 使用尽量小的数据类型2. 求余运算使用位操作来代替求余运算:只要是2^n的取模,都可以使用位操作来代替。使用移位运算来代替乘法运算。比如:3. 避免不必要的整数除法整数除法是整数运算中最慢的,所以应该尽可能避免。一种可能减少整数除法的地方是连除,这里除法可以由乘法替代,但是存在副作用就是,乘法有可能溢出。

2015-09-14 17:55:23 365

原创 二维数组的分配以及数组指针数组

C语言提供类似于矩阵的多维数组,在一些进行数学运算的程序中会经常用到。从形式 上看多维数组是由多个一维数组组成的,但C语言处理多维数组的方法和一维数组一样,都是线性存储,连续分配存储空间,可以用带偏移量(offset)的一 维数组来访问多维数组。而在数组规模不确定的情况下,就需要用malloc函数动态分配存储空间。这里的数组规模不确定指的是数组的维数确定,而每一维的 元素个数是不确定的。例如根据用

2015-09-14 17:54:21 231

原创 为栈实现高效的max操作

为栈实现高效的max操作题目: 请设计一个栈,除了提供push(压栈),pop(出栈),peak(取栈顶元素)操作以外,还能提供max(取栈中最大值)的功能,并使得时间复杂度最小。注:请仔细思考后再看下面的答案1.  方案一(不可行)设计一个成员max,等于栈中最大的元素,在每次push操作后,新压入的元素与max比较,然后将max赋值为它们中的大的元素值。这样,max函数

2015-09-14 17:53:14 244

原创 栈增长方向与大端/小端问题

栈增长和大端/小端问题是和CPU相关的两个问题。在内存管理中,与栈对应是堆。对于堆来讲,生长方向是向上的,也就是向着内存地址增加的方向;对于栈来讲,它的生长方式是向下的,是向着内存地址减小的方向增长。在内存中,“堆”和“栈”共用全部的自由空间,只不过各自的起始地址和增长方向不同,它们之间并没有一个固定的界限,如果在运行时,“堆”和 “栈”增长到发生了相互覆盖时,称为“栈堆冲突”,系统肯定垮台。

2015-09-14 17:52:26 221

原创 类中const, static, reference成员的初始化

1. 初始化一个引用变量必须在定义的时候。而所有的运算符操作都被视为赋值而不是初始化,所以引用参数的初始化必须在初始化列表中进行。 class Test{           public:                  Test(int val) : ref_(val){}                  ~Test() {}        

2015-09-14 17:51:39 357

原创 类中的常量, const对象和成员函数

常量起初读者可能认为合乎逻辑的选择是把一个const放在类里,但这不会产生预期的结果。在一个类里,const 恢复它在C中的一部分意思。它在每个类对象里分配存储并代表一个值,这个值一旦被初始化以后就不能改变。在一个类里使用const的意思是“在这个对象声明期内,这个是一个常量”。然而,对这个常量来讲,每个不同的对象可以含一个不同的值。把一个内部数据类型封

2015-09-14 17:51:05 258

原创 让你不再害怕指针

前言:复杂类型说明要了解指针,多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单,一个类型里会出现很多运算符,他们也像普通的表达式一样,有优先级,其优先级和运算优先级一样,所以我总结了一下其原则:从变量名处起,根据运算符优先级结合,一步一步分析.下面让我们先从简单的类型开始慢慢分析吧:int p; //这是一个普

2015-09-14 17:50:12 268

原创 C/C++中的输入与输出及如何读取一行文本

在使用C/C++进行编程的过程中,经常会遇到输入输出的问题。对于C语言中,1. 格式化输入输出。在C语言中,最常用的格式化输入输出是scanf和printf函数。和这两个函数对应的更安全的函数是fscanf和fprintf:指定文件指针对于字符串的处理还有sscanf和sprintf:指定字符串声明如下:int printf(const ch

2015-09-14 17:49:30 473

原创 C/C++中随机数的获取: 伪随机函数

1. C库中的伪随机函数rand的实现《The GNU C Library》里说的,大概如下:公式: Y=(a*X+c)mod m其中,a,c,m都是常数一种取值是:a = 0x5DEECE66D = 25214903917c = 0xb = 11    m = 2^48用上面的公式可以这样写:__int64 rand (

2015-09-14 17:47:44 704

原创 C/C++面试题-1

1. C语言中的 sizeof 问题(1)类型转换的问题    #include       #define NUM (sizeof(arr) / sizeof(arr[0]))            int arr[] = { 1, 2, 3, 4, 5, 6, 7 };            int main()      {          int i;

2015-09-14 17:47:04 189

原创 C语言中重要函数的简要分析及实例

C语言中重要函数的简要分析及实例1. strspn与strcspn2. strtok与strpbrk3. strstr, strchr与strrchr4. 字符串与数值之间的转换:atoi,atol,atof,strtod,strtol,strtoul5. frexp和ldexp1. strspn与strcspn(1)函数strspn:size_t strs

2015-09-14 17:45:18 295

原创 C库中对函数的可变参数的支持

C语言在 头文件定义了一些宏,当函数参数未知时去获取函数的参数。包括一个va_list类型和三个函数(宏)va_start, va_arg和va_end .变量和定义va_list类型通过stdarg宏定义来访问一个函数的参数表,参数列表的末尾会用省略号省略声明:void va_start(va_list ap, last_arg);用va_arg和va_end宏初始化参数

2015-09-14 17:44:27 214

空空如也

空空如也

空空如也
提示
确定要删除当前文章?
取消 删除