2014年2月24日

程序加载器如何工作的?

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

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

最大连续子序列和及其起始位置(未测试)

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

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

导航