02 2014 档案

系统调用的错误处理
摘要:UNIX系统中,系统调用后要进行错误检查。若系统调用出错,典型的会返回-1,同时设置全局整数变量errno来表示什么出错了。有些人会忽略错误检查,因为它们使代码变得臃肿,而且难以读懂。下面是UNIX fork函数的错误检查。if( ( pid = fork() ) < 0){ fprintf( stderr, "fork error: %s\n", strerror( errno )); exit(0);}通过定义下面的错误报告函数(error-reporting function),可在某种程度上简化代码。void unix_error(char *msg){ fp 阅读全文

posted @ 2014-02-28 10:41 奇好猫 阅读(649) 评论(0) 推荐(0)

几个时间复杂度O(logN)的算法
摘要:1 二分查找算法int BinarySearch(const ElementType A[], ElementType X, int N){ int mid, right, left; right = 0; left = N - 1; while(right X) left = mid - 1; else if(A[mid] 0){ 6 Rem = M % N; 7 M = N; 8 N = Rem; 9 } 10 11 return M;... 阅读全文

posted @ 2014-02-26 09:58 奇好猫 阅读(17418) 评论(3) 推荐(0)

程序加载器如何工作的?
摘要:UNIX系统中,每个程序都运行在一个进程上下文中,有自己的虚拟地址空间。如图:内核虚拟存储器用户栈(向下增长)共享库的存储器映射运行时堆(4KB对齐)(向上增长)数据段(.data .bss)(4KB对齐)代码段(.init .text .rodata)(4KB对齐)未使用外壳运行一个程序时,父进程生成一个子进程,它是父进程的一个复制品。它通过调用execve来启动加载器。加载器删除子进程现有的虚拟存储器段,并创建一组新的代码、数据、堆和栈。堆和栈被初始化为0。通过将虚拟地址空间中的页映射到可执行文件中页大小的片。新的代码和数据段被初始化为可执行文件的内容。最后,加载器跳转到_start地址( 阅读全文

posted @ 2014-02-24 16:03 奇好猫 阅读(455) 评论(0) 推荐(0)

最大连续子序列和及其起始位置(未测试)
摘要:/******************************问题描述:求一个序列中的最大连续子序列和以及起始位置。若全为负数,则返回0。*******************************/int start, end;start = end = 0;/******************************算法名称:枚举法简述:列举所有可能的序列,并求和。前缀相同的序列重复求和, 违背了“同一个数最多计算一次”的原则,导致复杂度上升。复杂度分析:T(N) = =时间复杂度:O()******************************/int Sum1(const int 阅读全文

posted @ 2014-02-24 10:54 奇好猫 阅读(686) 评论(0) 推荐(0)

导航