- 博客(35)
- 资源 (2)
- 收藏
- 关注
原创 内存泄漏及检测
一、What? 内存泄漏:由于程序员的疏忽或错误造成程序未能释放已不在使用的内存,导致减少可用内存,降低计算机性能,导致程序崩溃。 内存溢出:是指已有的数据超过了其获得到的内存所能存储的范围,比如用一个字节存放1000这个数字就属于内存溢出。int *p = new int;return 0;new之后没有delete,那么return后就会发生内存泄露。 虽然看上去这样并不造成什么严重后果
2016-07-14 17:39:54 514
原创 进程间通信-消息队列
一、What? 消息队列做为进程间通信的一种方式,提供了一种从一个进程向另一个进程发送一个数据块(接收一部分无意义)的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个消息都有一个最大长度的限制(MSGMAX),每个消息队列的总字节数有上限(MSGMNB)
2016-07-06 13:12:45 546
原创 fork()函数
fork() 函数用于从已存在进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。fork() 函数创建进程成功则多了一个PCB,有新的代码和数据,它们中大多数都来自父进程。也就是说,使用 fork() 函数得到的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制、控
2016-06-22 18:25:31 378
原创 vfork()函数
vfork() 函数用来创建一个新进程,它具有以下特点:(1)fork 创建的子进程拷贝父进程的数据段;vfork 创建的子进程共享父进程的数据段。 (2)fork 父子进程执行次序不确定;vfork 保证子进程先执行,子进程调用 exit 或 exec 后父进程被调度。运行结果(正确):把上面代码稍作修改,子进程执行体里的 exit 改成 return运行结果:程序未退出。why?如上所述,由
2016-06-22 17:44:08 936
原创 atexit()函数
进程终止的方式有8中,其中有exit系列的三个用来终止进程的函数 exit() 、_exit() 和 _Exit()这三个函数的本质区别在于是否立即将控制权交还给内核 (1)_exit() 和 _Exit() 函数都是强硬终止。在调用后立即进入内核,不管资源的释放,直接让OS干掉其PCB; (2)exit() 则会执行一些清理处理。进程退出,有可能一部分数据还在缓冲区,该函数调用就会在退出时让
2016-06-16 18:18:40 302
原创 常见进程调度算法
进程调度:实质是一种资源分配。决定将CPU分配给就绪队列中的某个进程。 发生进程调度原因: (1)正在执行的进程执行完毕; (2)执行中的进程因发生I/O请求或等事件而暂停执行 (3)时间片用完; (4)在进程通信或同步过程中执行了某项原语操作,如P操作(wait操作); (5)高优先级进入。作业调度:简单来说就是决定将外存后备队列的哪一作业调入内存。进程调度与作业调度的关系: 作业调
2016-06-15 22:43:08 872
原创 STL空间配置器
一、STL为什么需要空间配置器?(内存有关) 1、解决内存碎片(外碎片) 外碎片:小块内存频繁分配导致小块空间不连续,分配不出大块的空间。 内碎片:比如需要3个字节,向上对齐取整new了8个字节,那么这5个未使用的为内碎片。 解决外碎片会引入内碎片 比如list、map、set、hashtable等push(new)或pop(delete)操作都有小空间。 2、提高效率:
2016-06-06 13:52:40 403
原创 Linux的task_struct
进程:程序的执行过程;即把二进制文件(程序)从磁盘加载到内存之后的操作; 同时操作系统给这个文件创建了一个描述它的结构体,称为PCB。 每个进程都有一个PCB。 Linux下的PCB结构:task_structstruct task_struct { volatile long state; //进程状态(可执行、可中断等) #1 unsigned long flags;
2016-05-31 20:51:52 426
原创 Linux下的进度条小程序
一个简单的进度条需要两个属性:最大/最小范围和步长。 例如,创建一个范围为0到100的载入进度条,把进度条初始为0,当载入一个资源的时候用单位长度来让进度条前进一个步长。 (1)当进度条前进时,它都会重画自身(也就是每次从最左端开始显示比上一次多一个步长,就有了动态效果),那么就需要执行一次回车,让光标回到最左端;printf("[%-101s]\r",bar);(2)为了更清楚的显示进度,加上
2016-05-31 19:56:57 478
原创 Linux中find命令用法
Linux下的find命令,顾名思义,它是在目录结构中搜索文件,并执行指定的操作。Linux下find命令提供了相当多的命令参数,也就是以何种条件进行查找。命令格式:find [路径] [命令参数] [表达式] 默认路径是当前路径,默认表达式是 -print; -print:将查找到的文件输出到标准输出; 例如:在终端执行命令 find 或者 find. 或者find. -pri
2016-05-20 13:04:23 441
原创 二叉搜索树
二叉搜索树又称二叉查找树,它是一颗空树或者是具有以下特征的树: 1、若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; 2、若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值; 3、它的左、右子树也分别为二叉搜索树。二叉搜索树有查找,插入,删除等操作;有递归和非递归两种实现方法。查找一个节点:树为空则返回空;若要查找的节点等于根节点,返回根节点
2016-05-04 20:56:59 286
原创 快速排序递归与非递归
快速排序思想:以升序为例;在要排序的序列中选一个基准,使它左边的数都比它小,右边的数都比它大。具体步骤:1、区间选一个key,可以选区间右边界的那个数;2、让begin从区间左边界开始往后找大于key的数,找到后停下来,再让end从区间右边界-1开始往前找小于key的数,找到后让它和begin找的大的数交换;3、begin继续找大的,end继续找小的,如果begin和end相遇了,那么比较相遇点的数
2016-04-09 13:12:41 391
原创 levelDB简单认识
LevelDB是一个google实现的非常高效的kv数据库。它是一个c/c++编程语言的库,不包含网络服务封装,无法像一般的存储服务器(如MySQL)那样用客户端来连接它,使用者应该自己封装自己的网络服务器。
2016-04-06 21:36:09 493
原创 实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)
实现一个栈,要求Push(入栈),Pop(出栈),Min(返回最小值的操作)的时间复杂度为O(1)
2016-03-11 11:57:39 6922 2
原创 找出数组中只出现一次的两个数字
# include <stdio.h>int findFirstOne(int num){ int flag = 1; int count = 0; while (flag) { if (num & flag == 1) break; flag << 1; count++; }
2015-11-05 20:04:30 347
原创 进制转换
# include <stdio.h># include <assert.h># include <string.h>void swap(char *p1,char *p2){ char tmp = *p1; *p1 = *p2; *p2 = tmp;}void reverse(char *start,char *end){ assert(start !=
2015-11-05 19:48:23 258
原创 猜拳游戏
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<time.h>#include<windows.h>//宏定义#define NAME_SIZE 20#define PASSWD_SIZE 20#define NAME "zhangsan"#define PASSWD "123456"#define TRU
2015-11-05 19:37:31 362
原创 旋转字符串
# include <stdio.h># include <string.h># include <assert.h>/*char *left_rorate(char *str,int n){ int i = 0; int j = 0; char tmp = str[0]; int len = strlen(str); assert(str); f
2015-11-05 18:52:41 396
原创 实现strstr函数
# include <stdio.h># include <assert.h># include <string.h>char *my_strstr(const char *str,const char *sub_str){ const char *p = str; const char *q = sub_str; assert(str); assert(sub
2015-08-28 12:02:20 407
原创 实现函数itob
# include <stdio.h># include <assert.h># include <string.h>void swap(char *p1,char *p2){ char tmp = *p1; *p1 = *p2; *p2 = tmp;}void reverse(char *start,char *end){ assert(start !=
2015-08-27 22:16:05 538
原创 从键盘接收字符并输出对应大写或小写
# include <stdio.h># include <string.h>int main(){ char c = 0; while ( (c = getchar()) != EOF) { if (c >= 'a' && c <= 'z') { printf ("%c ",c-32);
2015-08-27 22:08:15 822
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人