01 2012 档案

摘要: 一个指向10个整型数数组的指针 int (*a)[10]一个指向函数的指针,该函数有一个整型参数并返回返回整型数 int (*a)(int)一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int (*a[10])(int)阅读全文
posted @ 2012-01-31 12:17 guoyuqiangf8 阅读(14) | 评论 (0) 编辑
摘要: 中断门与陷阱门在使用上的区别 并不在于中断是由外部产生的或是由cpu本身产生的,而是在于通过中断门进入中断服务程序时cpu会自动将中断关闭,也就是将cpu中eflags寄存器中IF标志复位,防止嵌套中断的发生;而通过陷阱门进入服务程序时则维持IF标志不变。 这是中断门与陷阱门的唯一区别阅读全文
posted @ 2012-01-29 09:28 guoyuqiangf8 阅读(114) | 评论 (0) 编辑
摘要: 中断源cpu外部硬件产生的cpu本身执行程序的过程中产生的外部中断就是通常所说的中断,对于执行中的软件来说,这种中断的发生完全是异步的,cpu对外部中断的响应完全是被动的。不过软件可以通过“关中断”指令关闭对中断的响应。(不考虑不可屏蔽中断)软件产生的中断是由专门的指令在程序中有意产生的,所以是主动的,同步的,这又被称为“陷阱”。X86对中断的硬件支持切换cpu的运行状态 中断、异常 通过子程序调用指令CALL和转移JMP来达到目的按不同的用途和 目的,cpu中一共有四种门任务门中断门陷阱门调用门其中除任务门外其它三种门的结构基本相同,但调用门并不是与中断向量表联系的阅读全文
posted @ 2012-01-28 21:42 guoyuqiangf8 阅读(55) | 评论 (0) 编辑
摘要: 即将面临毕业,希望将来向嵌入式linux发展,花了两天写了份简历,第一份简历肯定有不足之处,感觉缺少核心竞争力,有一种漂浮之感,决心最近复习linux内核原理,结合linux0.12和2.6版本,写一期关于内存管理与进程调度的博客。不足之处望网友不吝赐教。阅读全文
posted @ 2012-01-28 21:16 guoyuqiangf8 阅读(15) | 评论 (0) 编辑
摘要: 在此引用面试题与大家分享,希望感兴趣的网友多提宝贵意见。 网络编程中设计并发服务器时,使用多进程与多线程的区别? 用多进程时每个进程都有自己的地址空间,线程则共享地址空间。(所有其他区别都是由此而来)速度: 线程产生的速度快,线程间的通信快、切换快,因为他们在同一个地址空间内。资源利用率:线程的资源利用率比较好也是因为他们在同一地址空间内。同步问题: 线程使用公共变量或内存是需要使用同步机制,还是因为他们在同一地址空间内。阅读全文
posted @ 2012-01-28 11:17 guoyuqiangf8 阅读(219) | 评论 (0) 编辑
摘要: 进程是资源管理的最小单位,线程是程序执行的最小单位。在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP(双CPU系统,实际上是对称多处理机系统中最常见的一种)以及减小(进程/线程)上下文切换开销。 1.进程是程序的一次执行。 线程可以理解为程序中的执行的一段程序片段。2.进程间是独立的,这表现在内存空间、上下文环境上; 线程运行在进程空间内。3.一般来讲,进程无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一个进程所产生的线程共享同一内存空间。同一进程中的两段代码不能够同时执行,除非引入线程。4....阅读全文
posted @ 2012-01-28 10:59 guoyuqiangf8 阅读(3005) | 评论 (16) 编辑
摘要: strcat函数:原型:extern char *strcat(char *strDest, char *strSrc);功能:把strSrc所指字符串添加到strDest结尾处(覆盖strDest结尾处的'\0')并添加'\0';说明:strSrc和strDest所指内存区域不可以重叠且strDest必须有足够的空间来容纳strSrc的字符串。返回指向strDest的指针。 1 char *strcat(char *strDest, const char *strSrc) 2 { 3 char *address = strDest; 4 assert((str阅读全文
posted @ 2012-01-14 20:31 guoyuqiangf8 阅读(74) | 评论 (0) 编辑
摘要: strlen 标准函数: 1 int strlen(const char *str) 2 { 3 assert(str != NULL); 4 int len; 5 while ((*str++) != '\0') 6 { 7 len++; 8 } 9 return len;10 } 1 int strlen(const char *str) 2 { 3 assert(str != NULL); 4 char *tmp= str; 5 while (*tmp++) 6 { 7 ; 8 } 9 return (tmp - str -...阅读全文
posted @ 2012-01-14 16:49 guoyuqiangf8 阅读(711) | 评论 (0) 编辑
摘要: strcpy中的循环语句:while ((*strDest++ = *strSrc++) != '\0')这个循环会一直执行,直到循环条件为空,即'\0',也就是说,如果strDest所指的存储空间不够大的话,这个函数会将strSrc中的部分内容拷贝到strDest所指内存空间后面的内存中。而strDest所指空间后面的内存却是不可知的,有可能已经被其他资源占用了,这样就会破坏原先存储的内容,导致系统崩溃。因为strcpy在执行字符串拷贝的时候,会从strSrc所指位置开始,检测当前内存单元中存储的数据是否为'\0'。如果不为'\0阅读全文
posted @ 2012-01-14 15:41 guoyuqiangf8 阅读(130) | 评论 (0) 编辑
摘要: 1、 声明外部变量 现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子。创建一个工程,里面含有A.cpp和B.cpp两个简单的C++源文件:1 //A.cpp2 int i;3 void main()4 {5 6 7 }1 //B.cpp2 3 int i; 这两个文件极为简单,在A.cpp中我们定义了一个全局变量i,在B中我们也定义了一个全局变量i。我们对A和B分别编译,都可以正常通过编译,但是进行链接的时候,却出现了错误,错误提示如下:Linking...B.obj : erro.阅读全文
posted @ 2012-01-14 05:12 guoyuqiangf8 阅读(27) | 评论 (1) 编辑
摘要: 1 char* strcpy(char* strDest,const char* strSrc) 2 { 3 if((strDest == NULL) || (strSrc == NULL)) //[1] 4 throw "Invalid Arguments"; //[2] 5 6 //assert((strDest!=NULL) && (strSrc !=NULL)); 7 char* strDestCopy = strDest; //[3] 8 while((*strDest++ = *strSrc++) != '\0')//[4] 9 阅读全文
posted @ 2012-01-14 04:50 guoyuqiangf8 阅读(84) | 评论 (0) 编辑
摘要: strcpy原型声明:extern char *strcpy(char *dest, char *src)头文件;string.h功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和所指内存区域不可以重叠且必须有足够的空间来容纳src的字符串,返回指向dest的指针。不使用库函数实现strcpy函数(工业级) 1 char *strcpy(char *strDest, const char *strSrc) 2 { 3 assert((strDest != NULL)&&(strSrc !=NULL)); 4 char *tmp = strDest阅读全文
posted @ 2012-01-14 03:37 guoyuqiangf8 阅读(1058) | 评论 (0) 编辑
摘要: 马上就要毕业了,回头看大学时光过得很快,但在我的内心却没有留下遗憾,现在想起大一刚入学那会儿挺好笑的,有点愣头青的感觉。现在成熟多了。如果按现在的标准来看,大一大二浪费了一部分时间,我所学专业是物理教育。但其实我并不喜欢我的专业。在我们家周围有好几个教师,我只能说生活的很安宁。我大学时试图换专业,但没有成功。院长给的答复是已经报上去了。我知道这下肯定要在物理系待四年了,我喜欢计算机,有发自内心的一种热爱。大一时幻想将来能成为米特尼克一样的传奇人物。钻研黑客知识。现在看来那时很浮躁,很幼稚,计算机技术的学习必须脚踏实地。大二准备考四级网络工程师,当时看感觉很难,现在复习时很小儿科。结果通过了..阅读全文
posted @ 2012-01-13 18:53 guoyuqiangf8 阅读(53) | 评论 (2) 编辑