2012年7月20日

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

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

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

找出出现了奇数次的数

只有注册用户登录后才能阅读该文。 阅读全文

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

mahout下的K-Means Clustering实现

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

posted @ 2012-07-20 16:22 as_ 阅读(6039) 评论(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_ 阅读(24126) 评论(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_ 阅读(3105) 评论(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_ 阅读(2206) 评论(0) 推荐(0) 编辑

导航