共享内存 共享内存简介 共享内存是所有进程间通信(IPC)手段中速度最快的,不同进程间使用事实上的同一内存区域,这样使得进程间使用信息时免去“复制”这一流程,减少开销。 以下面“进程A从文件f中读取数据,进行加工之后,将数据传递给进程B”这种场景为例,若使用其他的IPC形式,我们至少需要以下步骤: 1. 从文件f中复制数据到进程A的内存中; 2. 加工数据; 3. 将加工好的数据通过系统调用拷贝到内核空间中; 4. 进程B得知有数据发来,从内核空间将加工好的数据拷贝到进程B的内存中; 5. 进程B使用数据 而我们若使用共享内存,则至少需要以下三个步骤: 1. 从文件f中复制数据到共享内存区域中; 2. 加工数据; 3. 进程B使用数据 显然的,在使用共享内存时,我们减少了一些无意义的数据复制。 不过,在这之中还有一些隐藏在其中影响效率的其他细节——系统调用的数量。在我们使用其他的IPC形式时,读取、写入时将不可避免的使用系统调用,当进行大量的数据吞吐时,频繁的系统调用就会严重地拖累性能。而当我们使用 继续阅读 >>


娄泽豪 18/10/31 22:56:59
其实也就是递归的思想,我们通过先序序列,可以得知该二叉树的根节点,根据中序序列以及根节点,就可以得到其左子树的先序以及中序序列,同理也得到其右子树的先序以及中序序列,这样递归下去,就可以求出最终的整个二叉树了 根据先序中序以及中序后序原理是一样的,不做过多的缀述(不要问我为什么不能根据先序后序恢复) 146 //根据输入的先序以及中序序列创建以root2为根节点的二叉树 147 BiTree *CreateTree(BiTree *root2,string s1,string s2) 148 { 149 if(s1.length() == 0) { 150 root2 = NULL; 151 return NULL; 152 } 153 //根据先序序列得出根结点 154 char root = s1[0]; 155 //根据中序序列得出根节点的左右子树的中序序列 156 s 继续阅读 >>


王恒 18/10/30 23:14:49
说是用c++写的,其实和C语言没差,也没用到C++与语言不同的地方,其实也是因为东西比较简单?? 其实想做一个可以和其他人对战的五子棋,但是得先把单机实现了再说,鉴于linux系统对于很多字符都是默认输出不了的 所以用了其他符号表示棋盘以及棋子 1 /*2018-10-29 2 简易五子棋 3 */ 4 #include <iostream> 5 #include <stdlib.h> 6 //定义棋盘 7 using namespace std; 8 int ar[15][15]; 9 //根据此时落子情况打印棋盘 10 void Print() 11 { 12 cout << " "; 13 for(int i = 0;i < 15;++i) { 14 if(i < 9) 15 cout << i+1 << 继续阅读 >>


王恒 18/10/29 19:49:31
实现过程 当我们在声明一个类时,编译器会自动帮我们创建一个虚函数表。 比如下面的这段代码: 编译器为我们生成的虚函数表 虚函数表: 虚函数表是由编译器自动产生的一种存储类成员函数的一种数据结构。其中虚函数会被自动放入表中。 那编译器是怎么找到虚函数表呢? 原来当我们当我们用类定义对象的时候,编译器内部会为成员结构体变量中增加一个指向虚函数表的指针 (vptr),当我们通过函数形参将子类传进来的时候,编译器首先会判断所传形参的数据类型,如果调用的函数具有virtual关键字,编译器会通过vptr指针,找到相应的虚函数表,继而找到相应的虚函数,达到所谓的迟绑定状态,即动态联编。如果不具有virtual关键字,编译器可直接确定被调用的成员函数,即静态联编。 作者:Cxinsect 发表于 2018/10/26 16:09:24 原文链接 https://blog.csdn.net/Cxinsect/ 继续阅读 >>


陈新 18/10/26 16:09:24
在使用IDEA开发比较大的Spring web项目的时候,常常会在pom文件中导入大量依赖,所以就有可能造成Maven的依赖冲突。下面来看一下如何解决Maven的依赖冲突。 1. 先清当前的jar包的缓存: IDEA的 File选项 -> invalidate caches/restart 2. 打印Maven的依赖树: mvn dependency:tree (建议将内容重定向到一个file里,方便查看,如:mvn dependency:tree > file.txt) Maven的依赖树的样式如下,图中圈出了一个包与其下所有子包的层级关系: 3. 定位产生依赖冲突的子包: 比如新加了xxx包之后,产生了依赖冲突,那么在file.txt依次全文搜索xxx包下依赖的所有子包,看看是否由别的包也依赖此子包。 如果在别的包(比如yyy包和zzz包)下面也发现有该子包,那么说明需要在xxx包、yyy包、zzz包其中两个包下排除这个子包的依赖,只保留一个包下的该子包的依赖。 那么,具体应该保留哪个 继续阅读 >>


祝一迪 18/10/25 20:51:53
https://yaoer.me/ 作者:qq_41145192 发表于 2018/10/24 18:23:38 原文链接 https://blog.csdn.net/qq_41145192/article/details/83348448 阅读:16 继续阅读 >>


朱一琛 18/10/24 18:23:38
标签: 数据结构算法 题目 A: 5×5 迷宫 输入 输入的数据仅有一组,为一个五行五列的矩阵。矩阵的每一行在一行以空格 为分隔符的输入中表示。 例如,若输入为: 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 ,则表示输入为矩阵: [ 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0] 。 该矩阵表示一个 5×5 的迷宫, 0 表示“可行走的路”, 1 则表示“墙壁”,该 迷宫中只可以横向或竖向行走,不能斜向行走。 输出 按顺序在每行以二元组形式输出从迷宫的左上角到右下角的最短路径。 每个 输出的二元组后换行一次。 迷宫的左上角的二元组表示为: (0, 0)。 样例输入 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 样例输出 (0, 0) (1, 0) (2, 0) (2, 1) (2, 2) (2, 3) (2, 4) (3, 4) (4, 4) 继续阅读 >>


胡锦雲 18/10/23 17:10:49
哈希表的实现 何为哈希表 简单来说,哈希表是一种存储结构,它存储的数据是 key:value 类型的。通过空间换时间的方法来加快查询速度,具体思想是如下: 使用一个较大的一维数组存储value,这个数组为Array 实现一个哈希函数,使得hash(key)的值在上一步的一维数组下标范围内 如此,对于任意的key:value,使用hash(key),之后就可以知道value在数组中存储的下标,存取速度快过线性查找Array[hash(key)] 哈希表的注意要点 哈希函数的选取 由于我们期望,两个不同的key,hash(key)之后的结果尽量不相同,这样才能使得哈希表存储空间的利用率提高,另一点,哈希表的空间换时间的主要原因就是他使用了哈希函数来确定value在数组中的下标而非普通的线性查找。那么,基于以上两点,哈希函数的选取就有以下条件: hash函数运行速度不能过慢 对于不同的key(即便两个key只是字母顺序不一致),哈希函数须尽量保证hash(key)的值不一致 处理哈希碰撞 由于是无论k 继续阅读 >>


李余通 18/10/09 20:17:14
框架: BFS: #include<cstdio>#include<cstring> #include<queue> #include<algorithm> using namespace std; const int maxn=100; bool vst[maxn][maxn]; // 访问标记 int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量 struct State // BFS 队列中的状态数据结构 { int x,y; // 坐标位置 int Step_Counter; // 搜索步数统计器 }; State a[maxn]; bool CheckState(State s) // 约束条件检验 { if(!vst[s.x][s.y] && ...) // 满足条件 return 1; else // 约束条件冲突 return 0; } void bfs(State st) { que 继续阅读 >>


胡锦雲 18/10/09 19:03:19
在写程序的时候,由于出现错误,创建了许多以特殊字符命名的文件 比如 "\%dsfgg&f*egg"等等 “/” 既可代表目录树的根也可作为路径名中的分隔符(类似DOS下的"\),因此"/"不能出现在文件名中。 “.” 和 “…” 分别用来表示"当前目录"和"父目录", 因此它们也不能作为文件名。 如果不小心创建了,这些文件是用 rm 命令删除不了的,并且也不能重命名 那么可以用 inode编号 删除掉 具体实现为: ls -i 命令显示出所有文件的inode值 比如某个文件为   1054553 \%dsfgg&fegg 然后 find ./ -inum 1054553 -delete 就可以删除掉啦 关于inode的知识,发现一篇文章总结的特别好,借用一下,虽然有的还没有看懂,先码着,回头慢慢啃 链接: [link]https://www.cnblogs.com/xiexj/articles/7214502.html. 继续阅读 >>


赖鑫 18/10/08 20:32:15