摘要: 1 大脑中跟记忆紧密关联的两个区域是扁桃体和海马体。我们通过视觉、听觉、触觉获取的信息,先由扁桃体判断喜恶,接着海马体会把情感上喜欢的东西当做重要信息来处理从而在大脑中打下印记。 小明撸了一把后,终于耐下性子看微积分、傅里叶变换,但扁桃体告诉他:尼玛坑爹啊,这都是啥啊?所以小明决定出去走走,未料转角 阅读全文
posted @ 2015-01-23 21:11 陈小硕 阅读(3631) 评论(13) 推荐(32) 编辑
摘要: 话说上回说到,C程序运行之前,必须要加载到其进程地址空间中。今儿咱就扯扯这个加载到底是怎么加载的。 一图胜前言,这个图简单说明了可执行文件加载过程的逻辑流,在此只做粗粒度概要说明。需要准确描述的,请出门左转,看源码去吧。1. 程序总是运行在进程上下文(context)中的,当输入./meml... 阅读全文
posted @ 2014-12-30 21:55 陈小硕 阅读(1668) 评论(1) 推荐(3) 编辑
摘要: 一个成功的男人背后,至少有一个伟大的女人;一个不成功的男人,至少有一双手。而一个C程序,无论成功不成功,它的背后一定有一个操作系统,一个shell,一套工具链。世界本就不公平。隐藏在显而易见的事实背后的,你若能看透,便可以站在对自己公平的那一端。1、进程地址空间一个进程一旦建立,就会自认为占有4G内... 阅读全文
posted @ 2014-12-29 22:17 陈小硕 阅读(4430) 评论(15) 推荐(14) 编辑
摘要: 这种错误只能说是坑,如果没有见到过,很可能就要摔里头。解决问题是重要的,但弄明白问题的来源,往往更为重要。所以要先扯一下,换行和回车的历史遗留问题。在计算机出现之前,有个玩意叫电传打字机。每秒钟可以打10个字符,但是在打完一行需要换行时,要用去0.2s。这正好可以打2个字符,这段时间里如果有字符传过来,那么这些字符将被丢失。很显然,要解决这个问题,最简单的办法就是浪费这个0.2s。同时,我们在写东西时,要把手换到下一行及每行的首位置,也就是说这是两个动作。自然而然地,研发人员在每一行后面添加了两个表示结束的字符(回车+换行)。所谓“回车”:让打字机的打印头重新回到一行的首位置(左边界);所谓“ 阅读全文
posted @ 2013-09-26 10:32 陈小硕 阅读(5082) 评论(0) 推荐(0) 编辑
摘要: 几个文件在堆代码的过程中,最常用到的文件有:头文件(.h)、源文件(.c/.cpp)、目标文件(.o/.obj)、库文件(.a/.lib和.so/.dll)和可执行文件(.out/.exe)。其中,头文件和源文件是用ACSII字符码出来的,处理器是读不懂这些字符的,所以需要编译器把它们翻译成二进制;目标文件、库文件和可执行文件都是经编译器处理之后的二进制文件,这是用户不可读的,所以打开这些文件也只是乱码。由于库文件和可执行文件是由目标文件进一步生成的,因而它们存储的内容并无太大差别,即代码和数据。在linux中,三者都是以ELF格式(Executable Linkable Format)存储的 阅读全文
posted @ 2013-01-22 12:57 陈小硕 阅读(2190) 评论(1) 推荐(8) 编辑
摘要: 由于项目需要,需要用嵌入式数据库SQLite3搭建数据库。首先当然是要安装SQLite啦。 从官网下了安装包,读完README和INSTALL,发现安装过程很简单,还是老三式: ./configure、make 和 make install。但是在安装好之后,程序还是无法运行,出现错误: ERROR 阅读全文
posted @ 2013-01-09 21:00 陈小硕 阅读(4049) 评论(1) 推荐(0) 编辑
摘要: 浮点数格式学C的时候就知道,浮点数采用的是类似于科学计数法的表示方式。具体的浮点数的模型是:一个尾数(mantissa),一个基数(base),一个指数(exponent)和符号位表示。再百度的深一点,在规范化形式下(没错,还有非规范形式),就可以把float和double的表示格式列个表格: ... 阅读全文
posted @ 2012-10-07 15:38 陈小硕 阅读(5030) 评论(1) 推荐(1) 编辑
摘要: 厘清”指针是什么“这件事什么是整型变量?我认为可以说成是接收整型数据的变量。这样就可以得到指针变量的定义——接收指针(地址)的变量——指针就是地址,这和指针变量是两回事!!指针是个(带箭头的)16进制的数,而指针变量就是盛放这个数的容器。还不能理解?换句话说,地址可以看成是特殊点的数据类型,和整型、字符、浮点等一个地位。但是地址这厮为了弄出神秘感来,硬是给自己扣了个头衔——指针。其实,一个指针变量携带的信息不只是一个地址而已,还有要分配的内存大小。变量的指针(地址)属性是由指针符号 '*' 标识的,而内存大小是由指针变量类型标识的。指针变量初始化先看两段代码:1 int a = 阅读全文
posted @ 2012-09-27 19:48 陈小硕 阅读(1318) 评论(10) 推荐(0) 编辑
摘要: 首先,还是得说一下C标准库的发展史喽。C89中有15个标准头文件: <assert.h>、<ctype.h>、 <errno.h>、 <float.h>、 <limits.h>、 <locale.h>、 <math.h>、 <setjmp.h>、<signal.h>、<stdarg.h>、<stddef.h>、 <stdio.h>、 <stdlib.h>、 <string.h>、<time.h>C95增加了3个标准头 阅读全文
posted @ 2012-09-24 22:58 陈小硕 阅读(2308) 评论(0) 推荐(0) 编辑
摘要: 在linux中,一切都看成文件,不管是目录还是设备。所以想要熟练使用Linux,那么对文件的本质和组织结构要有一定的认识。Linux中,文件都组织成字节流(byte stream)的形式,这样就有利于数据的流动和传输。对于字节流,可以借C++中的概念来理解,C++的标准输入输出iostream和文件流fstream的本质就是字节流。Linux的文件,乍看之下只能用乱来形容。其中最让人揪心的是,linux下的程序安装并不像windows下那样给一个文件夹就行,甚至指定路径都是徒劳的。而卸载时,往往是很难扫干净的。特别是在源码包安装时,连卸载的命令都没有(至少我没百度到)。其实,只要狠下心来,花点 阅读全文
posted @ 2012-09-14 21:52 陈小硕 阅读(2158) 评论(4) 推荐(0) 编辑