随笔分类 -  操作系统

摘要:位置无关代码: 起因: 当程序在多个不空地址空间运行时,操作系统通常会将程序加载到各个地址空间的相同位置, 这样可以让链接期在程序加载时不用再重定位,将地址绑定到固定位置。 对于动态库而言,如果如果我们不将动态库编译成PIC的也就是意味着loader一定要把动态库加载到某个特定 的地址(该地址编译的 阅读全文
posted @ 2017-03-05 16:42 Przz 阅读(4458) 评论(0) 推荐(0)
摘要:转载:http://blog.chinaunix.net/uid-20761674-id-3072683.html 一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念 阅读全文
posted @ 2017-03-04 16:35 Przz 阅读(228) 评论(0) 推荐(0)
摘要:本来最初是想知道共享库是怎么实现一个副本就行的,顺便拓展下。 虚拟内存: 当运行一个进程时,它需要的内存有可能大系统内存容量。通常一个进程会有4G独立的空间,那么n个进程就是 n 4G的内存,很明显系统内存不够。 每个进程的4G只是虚拟内存,每次访问的时候都要转变成物理地址。 虚拟内存主要是通过请求 阅读全文
posted @ 2017-03-04 16:31 Przz 阅读(772) 评论(0) 推荐(0)
摘要:主要任务: 1.符号解析 在声明变量和函数之后,所有的符号声明都被保存到符号表。 而符号解析阶段会给每个符号一个定义。 2.重定位: 把每个符号的定义与一个内存位置关联起来,然后修改所有对这些符号的引用,让他们 指向内存位置。 符号解析: 会将符号引用和可重定位目标文件的符号表中的确定符号定义关联起 阅读全文
posted @ 2017-03-04 16:26 Przz 阅读(602) 评论(0) 推荐(0)
摘要:代码移动: 如果一个表达式总是得到同样的结果,最好把它移动到循环外面,这样只需要计算一次。编译器有时候可以自动完成,比如说使用 O1 优化。一个例子: vmovesd (%rbx),%xmm(); //read from p vmulsd (%rdx),%xmm(),%xmm(); //mul by 阅读全文
posted @ 2017-03-04 16:24 Przz 阅读(766) 评论(0) 推荐(0)
摘要:程序编译: 1.预处理阶段: 1.文件包含:将 include扩展成文件正文 2.条件编译:根据 if和 ifdef将程序的某部分排除或者包含 3.宏展开:将出现宏引用的地方展开成相应的宏 2.编译阶段: 检查代码的规范性、是否有语法错误等,然后将其转换成低级机器语言。(C会转换成汇编语言) 3.汇 阅读全文
posted @ 2017-03-04 16:22 Przz 阅读(481) 评论(0) 推荐(0)
摘要:一 一个问题 原文链接:http://www.cnblogs.com/yangecnu/p/4196026.html#undefined 在StackOverflow上有这么一个问题 Why is processing a sorted array faster than an unsorted a 阅读全文
posted @ 2017-03-02 20:43 Przz 阅读(1051) 评论(2) 推荐(1)