随笔分类 -  C

摘要:1. 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位) 8bits(指数位) 23bits(尾数位)double:1bit(符号位) 11bits(指数位) 52bits(尾数位)于是,flo... 阅读全文
posted @ 2014-07-05 14:53 johnny_HITWH 阅读(293) 评论(0) 推荐(0)
摘要:http://wenku.baidu.com/link?url=bd75dv-I7pCuw9M7W8iFqu6jti6XPdUqVYDC1sXegmMpaacY7TPo-P9Vx38b8zBLj6NdbUymNCBvMCdQxcFWjBiUiIzcHBZ3-pnB6Lbg9pi 阅读全文
posted @ 2014-06-15 17:30 johnny_HITWH 阅读(155) 评论(0) 推荐(0)
摘要:Linux与Windows的动态连接库概念相似,但是实现机制不同。它引入了GOT表和PLT表的概念,综合使用了多种重定位项,实现了"浮动代码",达到了更好的共享性能。本文对这些技术逐一进行了详细讨论。本文着重讨论x86体系结构,这是因为(1)运行Linux的各种体系结构中,以x86最为普及;(2)该... 阅读全文
posted @ 2014-06-04 22:00 johnny_HITWH 阅读(1160) 评论(0) 推荐(0)
摘要:Imports,Using基本一样,有两个作用1、将后面命名空间中所有的名字导入到当前命名空间2、为后面的名字取一个当前命名空间可以访问的别名。比如StreamWriter这个类在System.IO命名空间,用的时候得写System.IO.StreamWriter才能找到,这通常太麻烦,因此只要写ImportsSystem.IO,就会把所有System.IO下面的名字,包括StreamWriter导入到当前命名空间,你再使用就可以直接写StreamWriter了!VB默认帮你导入System,Microsoft.VisualBasic等命名空间,因此不必手工导入还可以为某个名字取一个别名,比如 阅读全文
posted @ 2014-03-28 21:59 johnny_HITWH 阅读(820) 评论(0) 推荐(0)
摘要:前言 我决定写篇短文,即为此文。之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法。尽管在微博上简单梳理过,如下图所示: 但因字数限制,许多问题无法一次性说清楚,故特撰此文着重阐述下:程序员如何快速准备面试中的算法,继而推荐一些相关的书籍或资料。顺便也供节后跳槽、3月春季招聘小高潮、及6月毕业找工作的朋友参考。备战面试中算法的五个步骤 对于立志进一线互联网公司,同时不满足于一辈子干纯业务应用开发,希望在后端做点事情的同学来说,备战面试中的算法,分为五个步骤,如下: 1、掌握一门编程语言 首先你得确保你已掌握好一门编程语言:C的话,推荐Dennis M. Rit... 阅读全文
posted @ 2014-03-13 21:41 johnny_HITWH 阅读(584) 评论(0) 推荐(0)
摘要:在x.c中定义了一个字符数组 char s[100],在l.c中进行引用extern char s[200], 有些c程序新手经常把它写成extern char *s。 这两种写法的含义一样吗?首先得理解声明与定义的含义:定义一个变量意味着要给它进行内存分配, 而声明一个变量则可以在其他文件中, 只是进行一种声明, 表示有这个变量存在, 但是在其他文件中定义, 声明后不用分配内存。我们看一下extern char s[100]与extern char *s在执行s[10]的取值过程是什么样的:1、 extern char s[100], s是个符号, 它既是一个数组的名称, 又是数组的起始地址 阅读全文
posted @ 2014-03-11 14:49 johnny_HITWH 阅读(773) 评论(0) 推荐(1)
摘要:关于字符数组和字符指针关于相互赋值问题一只有疑问,其实是自己搞不清指针和地址的关系。地址可以指向一块内存但是不一定存在于内存,比如字符数组名,数组名是地址,但是不实际存在于内存中,无法修改,而字符指针是变量,因此可以修改。数组能修改的只是数据,而且每次只能修改一个。数组里面放的是数据,却没有变量存放数组指针。注意数组的初始化以及修改数据方式:后者除了初始化时,只能通过下标http://blog.csdn.net/okliujieko/article/details/6821321http://blog.sina.com.cn/s/blog_6a9d45ff0100n5jj.htmlconst 阅读全文
posted @ 2014-03-08 16:31 johnny_HITWH 阅读(282) 评论(1) 推荐(1)
摘要:size _t为了增强程序的可移植性,便有了size_t,不同系统上,定义size_t可能不一样。经测试发现,在32位系统中size_t是4字节的,在64位系统中,size_t是8字节的,这样利用该类型可以增加程序移植性。size_t的定义它的定义在/usr/include/linux/types.h typedef_kernel_size_tsize_t;跟体系结构相关而__kernel_size_t定义在/usr/include/asm/posix_types.h安装的是内核的源码asm-i386/posix_types.htypedef unsigned int __kernel_siz 阅读全文
posted @ 2014-01-28 23:19 johnny_HITWH 阅读(1285) 评论(0) 推荐(0)
摘要:在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂拿来Mark一下。将C++函数声明为``extern "C"''(在你的C++代码里做这个声明),然后调用它(在你的C或者C++代码里调用)。例如:// C++ code:extern "C" void f(int);void f(int i){// ...}然后,你可以这样使用f():/* C code: */void f(int);voi 阅读全文
posted @ 2014-01-27 22:47 johnny_HITWH 阅读(9242) 评论(0) 推荐(0)
摘要:ELF = Executable and Linkable Format,可执行连接格式,是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的,也是Linux的主要可执行文件格式。Executable and linking format(ELF)文件是x86 Linux系统下的一种常用目标文件(object file)格式,有三种主要类型:(1)适于连接的可重定位文件(relocatable file),可与其它目标文件一起创建可执行文件和共享目标文件。(2)适于执行的可执行文件(executable file 阅读全文
posted @ 2014-01-25 22:15 johnny_HITWH 阅读(281) 评论(0) 推荐(0)
摘要:PS:这里的缓冲与非缓冲的区别是相对于用户进程,下文的“非缓冲文件系统”指用户的程序没有缓冲区,不要误解为系统没有缓冲区。1.缓冲文件系统缓冲文件系统的特点是:在内存开辟一个“缓冲区”,为程序中的每一个文件使用,当执行读文件的操作时,从磁盘文件将数据先读入内存“缓冲区”, 装满后再从内存“缓冲区”依此读入接收的变量。执行写文件的操作时,先将数据写入内存“缓冲区”,待内存“缓冲区”装满后再写入文件。由此可以看出,内存 “缓冲区”的大小,影响着实际操作外存的次数,内存“缓冲区”越大,则操作外存的次数就少,执行速度就快、效率高。一般来说,文件“缓冲区”的大小随机器 而定。fopen, fclose, 阅读全文
posted @ 2014-01-16 16:20 johnny_HITWH 阅读(454) 评论(0) 推荐(0)
摘要:C语言中open函数作用:打开和创建文件。简述:1234#include int open(const char *pathname, int flags);int open(const char *pathname, int flags, mode_t mode);返回值:成功则返回文件描述符,否则返回 -1对于open函数来说,第三个参数仅当创建新文件时(即 使用了O_CREAT 时)才使用,用于指定文件的访问权限位(access permission bits)。pathname 是待打开/创建文件的POSIX路径名(如/home/user/a.cpp);flags 用于指定文件的打开/ 阅读全文
posted @ 2014-01-16 11:13 johnny_HITWH 阅读(288) 评论(0) 推荐(0)
摘要:就像莎士比亚的“To be, or not to be, that is the question”始终困扰着哈姆雷特,对于“进程还是线程?”这个问题,也经常困扰着那些进行软件架构设计的家伙。所以今天打算聊一下我对这个问题的体 会。假如你还搞不清楚线程和进程的区别,请先找本操作系统原理的书好好拜读一下,再回来看帖。 由于这个问题很容易引发口水战,事先声明如下:多进程和多线程,无法一概而论地说谁比谁好。因此本帖主要描述特定场景(与我所负责的产品相关)下,进程和线程的权衡经验,仅供大伙儿参考。 由于特定场景是本帖讨论的前提,先说说我目前负责的产品的特点:业务逻辑比较复杂、业务数据量比较大、对数.. 阅读全文
posted @ 2014-01-13 21:25 johnny_HITWH 阅读(248) 评论(0) 推荐(1)
摘要:Linux,unix在内核中设有 缓冲区高速缓冲或页面高速缓冲,大多数磁盘I/O都通过缓冲进行,采用延迟写技术。sync:将所有修改过的快缓存区排入写队列,然后返回,并不等待实际写磁盘操作结束fsync:只对有文件描述符制定的单一文件起作用,并且等待些磁盘操作结束,然后返回。fdatasync:类似fsync,但它只影响文件的数据部分。fsync还会同步更新文件的属性。fflush:标准I/O函数(如:fread,fwrite)会在内存建立缓冲,该函数刷新内存缓冲,将内容写入内核缓冲,要想将其写入磁盘,还需要调用fsync。(先调用fflush后调用fsync,否则不起作用)传统的U N I 阅读全文
posted @ 2014-01-09 11:24 johnny_HITWH 阅读(231) 评论(0) 推荐(0)
摘要:在windows下,读写文件时需要将0xoa 转为0xod0xoa(换行转为回车换行),需要逐个字节比对在linux下不存在这种情况,因此节省了时间。本质上这两种文件的区别在于编码方式的区别,前者是ASCII码或者UTF-8,后者则是数字编码(想想大端小端,多字节),但对于操作系统都视为字节流进行处理。多字节情况:文本的多字节编码由解码程序识别,数字多字节编码则由相应指令和cpu处理。疑问:char可不可以输入汉字 阅读全文
posted @ 2013-12-28 12:01 johnny_HITWH 阅读(226) 评论(0) 推荐(0)
摘要:源:blog.sina.com.cn/s/blog_4fd9844201010n3v.html应该说这是一个非常基础的问题,教科书上说指针大小和机器字长相同,即32位机指针长度为4字节!但是对不对呢?为什么是这样? 搜了一下相关资料。。。居然发现回答不统一,很多人也同样是糊里糊涂。 下面对这个问题做一个系统的整理 首先,介绍几个基本概念:(主要摘自百度百科) 字长:在同一时间中处理二进制数的位数叫字长。通常称处理字长为8位数据的CPU叫8位CPU,32位CPU就是在同一时间内处理字长为32位的二进制数据。二进制的每一个0或1是组成二进制的最小单位,称为一个比特(bit)。 ... 阅读全文
posted @ 2013-12-19 20:42 johnny_HITWH 阅读(941) 评论(1) 推荐(1)