服务器学习心得


系统处理过程

<ul> <li><a href="https://www.topgoer.cn/docs/data-structures-questions/data-structures-questions-1d94t1bk0bgcl#%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86">https://www.topgoer.cn/docs/data-structures-questions/data-structures-questions-1d94t1bk0bgcl#%E8%BF%9B%E7%A8%8B%E7%AE%A1%E7%90%86</a></li> </ul> <h2>Unix 系统上,编译器把源文件转换为目标文件过程</h2> <ul> <li>程序-&gt;预处理器-&gt;编译器-&gt;汇编器-&gt;链接器-&gt;可执行目标程序(二进制)</li> </ul> <h2>静态链接</h2> <ul> <li>静态连接器以一组可重定向目标文件为输入,生成一个完全链接的可执行目标文件作为输出</li> </ul> <h2>链接器主要完成任务</h2> <ul> <li>符号解析 <ul> <li>每个符号对应于一个函数、一个全局变量或一个静态变量,符号解析的目的是将每个符号引用与一个符号定义关联起来。</li> </ul></li> <li>重定位 <ul> <li>链接器通过把每个符号定义与一个内存位置关联起来,然后修改所有对这些符号的引用,使得它们指向这个内存位置。</li> </ul></li> </ul> <h2>目标文件</h2> <ul> <li>可执行目标文件 <ul> <li>可以直接在内存中执行;</li> </ul></li> <li>可重定向目标文件 <ul> <li>可与其它可重定向目标文件在链接阶段合并,创建一个可执行目标文件;</li> </ul></li> <li>共享目标文件 <ul> <li>这是一种特殊的可重定向目标文件,可以在运行时被动态加载进内存并链接;</li> </ul></li> </ul> <h2>静态库问题</h2> <ul> <li>当静态库更新时那么整个程序都要重新进行链接;</li> <li>对于 printf 这种标准函数库,如果每个程序都要有代码,这会极大浪费资源。</li> </ul> <h2>共享库</h2> <ul> <li>为了解决静态库的这两个问题而设计的,</li> <li>在 Linux 系统中通常用 .so 后缀来表示,</li> <li>Windows 系统上它们被称为 DLL</li> </ul> <h2>共享库特点</h2> <ul> <li>在给定的文件系统中一个库只有一个文件,所有引用该库的可执行目标文件都共享这个文件,它不会被复制到引用它的可执行文件中;</li> <li>在内存中,一个共享库的 .text 节(已编译程序的机器代码)的一个副本可以被不同的正在运行的进程共享。</li> </ul>

页面列表

ITEM_HTML