- 博客(29)
- 资源 (3)
- 收藏
- 关注
原创 数组初始化
提一个简单的问题:如何声明一个数组,并是他的所有元素被初始化为零?可能答案:当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0(全局或静态数组)或为不确定值(局部数组)。http://blog.chinaunix.net/uid-11092493-id-436388.html
2013-04-22 12:47:26
506
原创 linux多线程编程
UNIX中,每个线程用一个唯一的ID标识,ID数据类型为pthread_t。对线程ID进行处理的有以下两个函数接口:int pthread_equal(pthread_t tid1, pthread_t tid2); //比较两个线程ID是否相同pthread_t pthread_self(void); //获取本线程的ID在传统的UNIX进程模型中,每个进程只有一个控制线程。
2013-04-22 10:03:23
537
转载 关键字 -- restrict
restrict是C99新增的一个关键字,其主要目的是用来优化用的。它只能修饰指针。该关键字告诉编译器,哪些指针引用是可以优化的,其方法是指明指针指向的对象,在函数中只通过该指针进行访问。它的英文定义是: It can be applied only to pointers, and it indicates that a pointer is the sole initial m
2013-04-21 19:58:46
496
原创 不解的Bug
今日在写ALM算法的C代码的时候,遇到了一个令我匪夷所思的Bug。现将相关现象记录如下:在一个名为utils.c的文件中定义函数dabs,并且在头文件utils.h中申明了它并使用了extern关键字。然后我在alm.c的文件中使用到了dabs函数,但是在该.c的文件中我忘记了include utils.h头文件。结果编译链接之后,对dabs的调用计算不正确。在alm.c文件中包含了uti
2013-04-21 10:30:48
586
原创 自己玩玩的MakeFile
makefile命令的基本格式:Target : prerequisites .... commandTarget是要生成的东西,冒号后则是生成该目标所依赖的东西。而command则是make执行的命令。千言万语,都不如一个简单的例子来的明了。main : main.o func.o gcc -o main main.o func
2013-04-18 15:00:10
652
原创 系统调用
这个等看的够明白了再写,不过这里先放个图,很能说明问题。一、系统调用参数传递用户态的程序在调用函数时,将它的参数写到程序栈里面去。而系统调用则是将它的参数传递给相应的system call hanlder,并存储在CPU的寄存器中,然后在复制到内核栈。之所以还要复制到内核栈,是因为system call service routines是普通的C函数。另外不直接将参数从用户栈复
2012-09-27 21:36:31
271
原创 C++关键字之static
#include using namespace std;class A { public: A(){}; ~A(){}; void set(int c) { a = c; }; void get(void) { cout<
2012-09-26 14:39:10
287
原创 C++对象模型
搞点兴奋神经的东西来活力我的早晨,而那个就是桌面上的C++对象模型了。看这本书的目的不在于奇淫巧技,更想去体悟思想层面的东西,以获得一些编程心智上的开发。废话少说,看看书中给出的一个说明C++对象模型的例子吧。class Point {public:POINT(float xval);virtual ~Point();float x() const;static int Poi
2012-09-25 08:36:47
261
原创 矩阵分解--随机算法
矩阵分解问题往往可以使用一些经典算法求解,比如QR分解、SVD分解等等。在这些方法的基础上,可以使用随机化的方法使得矩阵分解的效率更高。关于这个问题可以看这篇文章Finding structure with randomness: probabilistic algorithm for constructing approximate matrix decomposition。这篇文章使用
2012-09-20 22:03:07
974
原创 概率分布的近似
有时候某个概率分布本身很复杂,但计算却要用,这时候往往会有一些近似方法。今天下午我知道了,可以用Laplace approximation去近似一个概率分布。
2012-09-19 15:54:06
1106
原创 算法学习--分治法
分治法的思想是:将原问题划分为与原问题具有相似结构的小问题,然后递归地求解小问题。其解决问题的过程可归纳为以下三个步骤:一,分解(Divide),将原问题分解为一序列子问题;二,解决(Conquer),递归地解子问题,若子问题足够小了,那么就可以直接解决子问题;三,合并(Combine),将子问题的结果合并为原问题的解。这里学习学习使用分治法来求解序列排序问题,相应的排序算
2012-09-17 20:26:14
629
原创 快快乐乐生活
从过年到现在,我浪费了很多精力和时间,我也学会了很多东西。而且很多东西都是从痛苦的挣扎之中学来的。现在再看看,当然会觉得有点可笑,可笑自己怎么会那么愚笨,竟陷入自己的情绪之中无法自拔。可是我也不能完全否认自己就能不那样,实际上,我还是相信那是我的人生中一个必经的阶段。因为我在改变,彻头彻尾地改变,换一种眼光,换一种心情,换一种价值观,换一种生活方式。所以那段时间,我一直在干的其实就是一件事---重
2012-09-11 16:28:05
534
原创 矩阵的norm
对于向量的norm,只要是接触过一点线性代数的人来说,都是耳熟能详。最为常见的莫过于2-norm了。这里不打算再去将向量的norm,最近我比较关心的是矩阵norm。矩阵norm有两种常见的定义:一是induced norm;二是Frobenius norm。现在来看看它们的数学定义形式。Induced norm:||A|| = \max_{x!=0} \frac{||Ax|
2012-09-11 16:18:42
5918
原创 C语言--运算符优先级
对于不确定性问题,要想办法去确认,否则等待你的将会是Bug-----编程心得上个月在南京为项目中增加一个控制监视模块的时候,草草地写完了代码,代码中有一句是这样的:if (indicator & 0x8000 == 0x8000) { do something} 这里,indicator是int型。我的意思是,如果indicator的第16位是1,那么
2012-09-11 12:09:58
511
原创 CMake简单使用
作为一个linux后现代程序员,对于远古时代的自动化构建工具make很是敬畏,但却真的没有那么大的勇气去写makefile,特别是当项目比较大的时,仅仅是写makefile就会把好端端的一个人搞残搞废。还好,同样有此体会的牛人们搞出了cmake,这样一来,makefile不用自己亲手写了,它也可以被自动生成了,而生成它的cmake则要简单的多。一、从最简单的开始假如我们用CMake来管理经
2012-07-06 09:40:16
680
原创 gdb调试子进程
用gdb调试多进程的程序会遇到困难,gdb只能跟踪一个进程(默认是跟踪父进程),而不能同时跟踪多个进程,但可以设置gdb在fork之后跟踪父进程还是子进程。具体方法如下:在使用GDB启动程序后,首先调试的是父进程,若要切换成调试子进程,那么使用命令set follow-fork-mode child
2012-06-29 10:28:48
1518
原创 仿射集和凸集
首先,看看仿射集和凸集的定义:A set C is affine if the line through any two distinct points in C lies in C.A set C is convex if the line segment between any two points in C lies in C.倘若没有注意到红色部分,上面的定义看起来非常
2012-06-28 10:18:05
5595
原创 sizeof VS strlen
char buf[] = "Hello world"sizeof(buf) - 1 = strlen(buf)1.sizeof 是个宏,故而sizeof(buf)在编译时即以知道。另外,它计算的是整个缓冲区的长度,包括字符串末尾的'\0'。2.strlen是个函数,只有运行时才知道结果。它计算的字符串长度不包括末尾的\0
2012-06-26 11:10:23
331
原创 C程序运行
C程序运行流程:1.内核执行C startup routine。在该startup routine中,内核运行exec函数族中一个来运行C程序。2.被exec运行的C程序 从main函数开始执行. ISO C规定的main函数原型为如下形式:int main(int argc, char *argv[]);3.C程序运行完毕。以下为程序正常退出的五种方式: a. ret
2012-06-26 10:31:10
421
原创 关于套接字的一点学习
这几天写程序的中心点是socket,因为手上的一个项目在这一块出了些问题。问题在于我写的程序向伙伴写的程序发送数据,他的程序未能正确接收到我发送的数据。原以为套接字编程就是简简单单地几个socket库函数的使用而已,但现实的问题却总在提醒我,“哥们,你还太天真了!”。痛定思痛,有了以下几点新的认识。1.流数据的读写,不是一次完成的(如果数据比较大),而是可能分成好几读到的。这个就像是网络中发送
2012-05-29 22:31:29
433
原创 C语言main函数
我想,绝大多数程序员写的第一个函数必定是main函数,就如同刚出生的小孩第一眼见到的是她的亲妈一样。但是,对于如此亲密的main函数,我们真的是对它了如执掌吗?那可未必。在此,我写下我浅薄的认识。很多初学者在写第一个C语言程序的时候,会把main函数写成这样:void main(){ ..........}我从开始学习C语言直到毕业,都是像上面那样写main函数。不
2012-04-07 16:35:23
1097
原创 Linux编程之路---共享内存
所有共享内存块的大小都必须是系统页面大小的整数倍。 ----------------------不知那门的定律一、 共享内存编程的两种标准在Unix编程环境下,存在两种不同的共享内存编程标准:一是POSIX标准,二是System V标准。这两套标准提供的接口函数分别如下。PO
2012-04-06 20:49:39
271
原创 C语言头文件那点事--我的模板
地球人都知道,C语言有.c和.h两种类型的文件,前者是程序文件,它用来保存程序的逻辑实现,后者是头文件,它用来保存一些共用的数据类型和函数接口等的申明。为什么需要头文件类?这是现实需求的产物,有了头文件,就可以将程序的具体实现和使用接口分开,由此用户不需要了解程序的逻辑实现也可以使用程序提供的功能。因此,一个具有很高通用性的头文件,就好比是一张免签护照一样,它本身做的越好,那么它就能够在各种环境下
2012-04-06 16:00:37
697
原创 C语言关键字学习(1)----- extern
序言: 如果C语言是程序员手下的一支精锐之师,那么基本语法是它的主力军,而关键字则是士兵们手中的利器。对于一个需要经常驰骋疆场的C程序员来说,如果不能把这柄利器运用自如的话,那么不仅会失去“一夫当关,万夫莫开”的雄风,甚至还会伤及自身。因此,我开了这么一个序列,尝试将兵器库里的各种奇异兵器玩耍一遍。另外,这里我介绍的关键字都是实践中遇到的。一. 不要再见外了-----e
2012-03-30 10:17:50
442
原创 再学C++,从零开始
第一次接触C++已经是几年前风华正茂的事了,是那个第一教我们编程语言的湛老师给我们讲的课。那个时候,对于连C语言考试都不能及格的我来说,C++显然是太为难我了。而我也的确没有怎么去刁难自己,依然是自我地逍遥自在去了。所以,对于C++,我只是有一种似曾相识的感觉!不过,今天开始,它却又要走进我的生活里,那么就从零开始怕。昨晚变了一个简单的C++程序,里面只有一个类,代码如下:/* * io
2012-03-19 09:32:37
499
原创 终于做了决定
决定,对我来说,是一件难事,特别是当摆在我面前的是关于人生的选择,我就尤为显得无力。所以,人们会说,有太多的选择,未必是好事。而我知道我所患的病,就是精神学邻域里的“选择性障碍”,面对选择,犹豫不决,即使做了一个艰难的决定,也时常在想,这似乎并不是一个太好的决定。很明显,我是在过份地追求完美,但是却又极其匮乏自信。有时候是不是就算知道自己有那个问题,但却仍然没有办法去克服。喜欢孙燕姿的一首歌,
2012-03-08 22:28:05
356
原创 纲要
生活需要混乱和秩序并存,而为了我的生活不全是混乱,给自己定下以下的纲要: 1.作为一个程序员成长,搞清楚操作系统。 2.将机器学习进行到底,学会处理信息。 3.阅读书籍,陶冶情操!
2012-03-06 22:33:21
252
原创 宣言
<!--@page {margin:0.79in}p {margin-bottom:0.08in}--> 之所以开博客,是因为受刺激了,受到高手的刺激。 去年冬天,老师无意间搜到同校一个博士的博客,看了之后,对其大为赞赏,“江山代有才人出,一代更比一代强!”于是我把该博客添加了书签。好奇心来了的时候,就会去打开看看,看看这个大牛是怎样在
2012-03-06 22:30:10
322
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人