上一页 1 ··· 8 9 10 11 12 13 14 15 下一页

2012年7月21日

函数指针和指针函数

摘要: 函数指针一、基本内容函数指针是指向函数的指针变量 .因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。如前所述,C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上一致的。函数指针有两个用途:调用函数和做函数的参数。函数指针的说明方法为: 函数类型(指针变量名)(形参列表);说明:1.“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形. 阅读全文

posted @ 2012-07-21 16:36 as_ 阅读(1544) 评论(0) 推荐(1) 编辑

信号量、互斥体和自旋锁

摘要: 一、信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作: (1) 测试控制该资源的信号量。 (2) 若此信号量的值为正,则允许进行使用该资源。进程将信号量减1。 (3) 若此信号量为0,则该资源目前不可用,进程进入睡眠状态,直至信号量值大于0,进程被唤醒,转入步骤(1)。 (4) 当进程不再使用一个信号量控制的资源时,信号量值加1。如果此时有进程正在睡眠等待此信号量,则唤醒此进程。 维护... 阅读全文

posted @ 2012-07-21 14:50 as_ 阅读(39626) 评论(5) 推荐(11) 编辑

2012年7月20日

Linux写时拷贝技术(copy-on-write)

摘要: 源于网上资料COW技术初窥: 在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,但其对应的物理空间是同一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间,如果不是因为exe 阅读全文

posted @ 2012-07-20 20:24 as_ 阅读(110322) 评论(10) 推荐(42) 编辑

mahout下的K-Means Clustering实现

摘要: (借鉴于网络资料,有修改)一、概念介绍 K-means算法是硬聚类算法,是典型的局域原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数,利用函数求极值的方法得到迭代运算的调整规则。K-means算法以欧式距离作为相似度测度,它是求对应某一初始聚类中心向量V最有分类,使得评价指标J最小。算法采用误差平方和准则函数作为聚类准则函数。 K-means算法是很典型的基于距离的聚类算法,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。 k个初始类聚类中心点的选取对聚类结果具有较大. 阅读全文

posted @ 2012-07-20 16:22 as_ 阅读(6050) 评论(0) 推荐(0) 编辑

C/C++函数调用过程分析

摘要: 这里以一个简单的C语言代码为例,来分析函数调用过程代码: 1 #include <stdio.h> 2 3 int func(int param1 ,int param2,int param3) 4 { 5 int var1 = param1; 6 int var2 = param2; 7 int var3 = param3; 8 9 printf("var1=%d,var2=%d,var3=%d",var1,var2,var3);10 return var1;11 }12 13 int main(int ... 阅读全文

posted @ 2012-07-20 15:11 as_ 阅读(24323) 评论(0) 推荐(2) 编辑

Linux的原子操作以及LOCK前缀

摘要: 关于原子操作所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。 原子操作主要用于实现资源计数,很多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下: typedef struct { volatile int counter; } atomic_t; volatil 阅读全文

posted @ 2012-07-20 12:45 as_ 阅读(3121) 评论(0) 推荐(0) 编辑

找出二叉树中两个节点的最低共同父节点

摘要: 算法设计:后续遍历此二叉树,将两个节点的父节点分别放入两个链表中,然后顺序对比,找出最后一个相同的节点,既是最低共同节点C伪码实现:List *h,*h1,*h2;bool find1=false,find2=false;void postVisit(BTNode *root){ if(root!=null) { add(root,h); //将root结点加入以h为表头的链表中 postVisit(root->lchild); if(root->lchild!=NULL)... 阅读全文

posted @ 2012-07-20 10:31 as_ 阅读(2207) 评论(0) 推荐(0) 编辑

2012年7月19日

C/C++中volatile关键字

摘要: (转 有修改,并且重新整理了格式)1. volatile关键字C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 "The C++ Programming Language" 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressiv 阅读全文

posted @ 2012-07-19 14:44 as_ 阅读(1250) 评论(0) 推荐(0) 编辑

基本设计模式:单例模式和工厂模式代码实现

摘要: 单例模式 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但它不能阻止你实例化多个对象。一个最好的办法是,让类自身负责保存它的唯一实例。这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。 也就是说,很多时候我们需要全局的对象,如一个工程中,数据库访问对象只有一个,这时,可以考虑使用单例模式。单例模式比全局对象好还包括:单例类可以继承,如下例中的C++代码。 单例模式的关键点在于:构造函数私有,静态的GetInstance。 另外,在C++中必须注意内存的释放。C++、Java、C#中还要注意多线程时的同步问题, 阅读全文

posted @ 2012-07-19 13:44 as_ 阅读(12440) 评论(0) 推荐(1) 编辑

C/C++中static关键字作用总结

摘要: 1.先来介绍它的第一条也是最重要的一条:隐藏。(static函数,static变量均可)当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。举例来说明。同时编译两个源文件,一个是a.c,另一个是main.c。//a.cchar a = 'A'; // global variablevoid msg(){ printf("Hello\n");}//main.cint main(){ extern char a; // extern variable must be declared before use ... 阅读全文

posted @ 2012-07-19 10:42 as_ 阅读(49676) 评论(4) 推荐(10) 编辑

上一页 1 ··· 8 9 10 11 12 13 14 15 下一页

导航