05 2015 档案

摘要:const int a=10;涉及到一个叫常量折叠的概念(认为我这说得太简单或者不好理解的可以google一下它获取更多信息), 即编译器虽然会给a分配空间(如果取a的地址进行操作的时候,会强迫编译器进行内存分配), 但是在预编译阶段, 会把所有的a用10替换(这就有点像#define了), 所以虽... 阅读全文
posted @ 2015-05-31 22:34 kkshaq 阅读(641) 评论(0) 推荐(0)
摘要:SYN Flood是当前最流行的DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽(CPU满负荷或内存不足)的攻击方式。http://blog.csdn.net/bill_lee_sh_cn/artic... 阅读全文
posted @ 2015-05-31 21:22 kkshaq 阅读(1213) 评论(0) 推荐(0)
摘要:1.非递归版本#include #include using namespace std;void MergePass(int *arr,int *temp,int len,int step);void merge(int *temp,int *arr,int low,int mid,int hig... 阅读全文
posted @ 2015-05-30 20:45 kkshaq 阅读(171) 评论(0) 推荐(0)
摘要:http://blog.csdn.net/dyllove98/article/details/8917197Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起。(所依据的代码是2.6.32.60)无论是内核线程还是用户进程,对于内核来说,无非都是task_stru... 阅读全文
posted @ 2015-05-30 11:12 kkshaq 阅读(1091) 评论(0) 推荐(0)
摘要:1.close()函数:立即返回到进程intclose(intsockfd);//返回成功为0,出错为-1.close 一个套接字的默认行为是把套接字标记为已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,也就是说它不能再作为read或write的第一个参数,然而TCP将尝试发送已... 阅读全文
posted @ 2015-05-28 11:08 kkshaq 阅读(3443) 评论(0) 推荐(0)
摘要:1、最长公共子串Longest-Common-Substring:有两个字符串,求这两个字符串的最长公共子串,要求子串是连续的/ 最长公共子串 DPint dp[100][100];void LCS_dp(char * X, char * Y) { int xlen = strlen(X); ... 阅读全文
posted @ 2015-05-27 11:35 kkshaq 阅读(346) 评论(0) 推荐(0)
摘要:heap堆分配在用户层面:malloc函数用于heap内存分配void* malloc(size_t size); 进程的虚拟内存地址布局:对用户来说,主要关注的空间是User Space。将User Space放大后,可以看到里面主要分为如下几段:Code:这是整个用户空间的... 阅读全文
posted @ 2015-05-25 16:36 kkshaq 阅读(6832) 评论(0) 推荐(0)
摘要:一般在内核术语中的“碎片”都是基于物理内存而言的,我没有太看懂你得出碎片是针对地址空间这个结论的逻辑。但我认为,既然你知道了malloc是用户空间调用的,那么你所谓的碎片也是从用户空间的视角而言的,但对于用户空间,看到的只有地址空间,其访问的所有地址都是要经过页表的转换后才访问的物理页面,而且mal... 阅读全文
posted @ 2015-05-25 11:33 kkshaq 阅读(3172) 评论(0) 推荐(1)
摘要:1.为什么需要连续的物理内存:Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数个4k(在i386体系结构中)大小的页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[3],系统可以东一页、西一页的凑出所需要的... 阅读全文
posted @ 2015-05-24 22:25 kkshaq 阅读(257) 评论(0) 推荐(0)
摘要:内核态与用户态是操作系统的两种运行级别,intel cpu提供Ring0-Ring3三种级别的运行模式。Ring0级别最高,Ring3最低内核态可以拥有比用户态更大的权限处于内核态的进程,可以访问用户进程空间(是虚拟地址空间),就是通过进程的页表(进程本身就是一个4G虚拟地址空间。其中用户空间的3G... 阅读全文
posted @ 2015-05-24 22:14 kkshaq 阅读(465) 评论(0) 推荐(0)
摘要:快速排序2(算法交换链表节点,平均时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1))这里的partition,我们选取第一个节点作为枢纽元,然后把小于枢纽的节点放到一个链中,把不小于枢纽的及节点放到另一个链中,最后把两条链以及枢纽连接成一条链。这里我们需要注意的是,1.在对一条子... 阅读全文
posted @ 2015-05-20 22:41 kkshaq 阅读(1083) 评论(0) 推荐(0)
摘要:快排不适合同于链表,但是可以实现,时间复杂度为o(nlgn)平均时间复杂度O(nlogn),不考虑递归栈空间的话空间复杂度是O(1))分析:由于单链表是没有prev指针的,所以跟数组一样的low,high指针就不适合单链表方法一:不移动元素节点本身,只移动元素的值 /... 阅读全文
posted @ 2015-05-20 21:00 kkshaq 阅读(3100) 评论(0) 推荐(0)
摘要:注意:快排是不稳定算法无论是low,还是high,都是a[low]=pivot,等于号是包含的,也就是出现元素与pivot相等的时候,是不移动这个相等的元素的#includeusing namespace std;int Partition(int*arr,int low,int high);vo... 阅读全文
posted @ 2015-05-20 19:36 kkshaq 阅读(195) 评论(0) 推荐(0)
摘要:思想:把待排序的链表分为已经排序的链表,和剩余未排序的链表例如:3->4->1->5->2->NULL已经排序完毕的的链表:(从第一个数开始) 3->NULL 未排序完毕的链表:4->1->5->2 用p表示还未排序的剩余链表的首节点例如:3->4->NUL... 阅读全文
posted @ 2015-05-20 18:40 kkshaq 阅读(464) 评论(0) 推荐(0)
摘要:折半插入排序:没有哨兵的概念。a[0]只要是保存待插入元素改善:减少了元素之间的比较次数,但是元素之间的移动次数没有改变。#includeusing namespace std;void BInsertSort(int a[],int length){ int i,j; ... 阅读全文
posted @ 2015-05-20 16:00 kkshaq 阅读(208) 评论(0) 推荐(0)
摘要:主要是哨兵的作用,把arr[0]位置作为哨兵,哨兵有两个作用:1.是保存待插入的元素,相当于temp的作用,因为每次比较,都会移位,后面的元素的值都会被前面的覆盖2.用于监视,是否数组越界,j=0时,a[j]=a[0],此时会跳出for循环。用于监视数组越界,若不使用哨兵a[0],则每次循环都要判断... 阅读全文
posted @ 2015-05-20 11:20 kkshaq 阅读(176) 评论(0) 推荐(0)
摘要:函数模板:函数模板全特化:所谓特化,是指相对普通模板的特化,是另外一个模板。但不是实例,只是模板template //普通函数模板,泛型T mymax(const T t1, const T t2){ return t1 const char* mymax(co... 阅读全文
posted @ 2015-05-19 21:31 kkshaq 阅读(663) 评论(0) 推荐(0)
摘要:一:初始化问题:1.定义一个已知长度的 vector :vectorivec(10);//初始化为size=10,capacity为10,元素值全部为0(默认) int cap=ivec.capacity(); int size=ivec.size(); ivec.push_back(1);//成为... 阅读全文
posted @ 2015-05-19 16:19 kkshaq 阅读(372) 评论(0) 推荐(0)
摘要:1、由于vector的复制构造函数只为被复制的vector分配它所需要的空间,故可以用如下的方式来削减vector v中过剩的容量:vector(v).swap(v)2、the swap trick在交换两个容器内容的时候,将会交换两个容器的迭代器,指针和引用。std::vector().swap(... 阅读全文
posted @ 2015-05-19 15:00 kkshaq 阅读(281) 评论(0) 推荐(0)
摘要:SIGHUP会在以下3种情况下被发送给相应的进程:1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)2、session首进程退出时,该信号被发送到该session中的前台进程组中的每一个进程3、若组长进程退出导致进程组成为孤儿进程组,且该进程组中有... 阅读全文
posted @ 2015-05-18 18:31 kkshaq 阅读(880) 评论(0) 推荐(0)
摘要:每个进程都拥有一个自己的页表,在linux中,有一个页目录数组,这是分页机制的最高层,每个进程的页表对应其中的一个页目录项,通过cr3寄存器可以访问。一个进程的页表,对应的页表项中对应页的物理地址。2. 分页机制分页机制的作用 分页机制是在段机制之后进行的,它进一步将线性地址转换为物理地址。 8... 阅读全文
posted @ 2015-05-18 16:14 kkshaq 阅读(4450) 评论(0) 推荐(1)
摘要:pause和sigsuspend都是用于等待信号的发生简单的说,sigsuspend = unblock + pausesigsuspend 函数是用于需要先接触 某个信号的阻塞状态 然后等待该信号发生 这样的应用场景;1、而使用 pause 在达到这样的效果时肯定是需要先 调用sigprocmas... 阅读全文
posted @ 2015-05-17 22:49 kkshaq 阅读(1072) 评论(0) 推荐(0)
摘要:class Solution {public: string longestPalindrome(string s) { int length=s.length(); int maxlen=0; int start=0; bool fla... 阅读全文
posted @ 2015-05-02 16:27 kkshaq 阅读(159) 评论(0) 推荐(0)
摘要:class Solution {public: char *strStr(char *haystack, char *needle) { const int n = strlen(haystack), m = strlen(needle); if (!m) ... 阅读全文
posted @ 2015-05-01 19:57 kkshaq 阅读(139) 评论(0) 推荐(0)