
程序员的自我修养
&HeiDi
这个作者很懒,什么都没留下…
展开
-
《程序员的自我修养》p7 动态链接—为什么要动态链接
为什么要动态链接内存和磁盘空间在多进程操作系统下,静态链接是比较浪费内存空间的;一个普通程序除了printf,scanf等公用库函数,还有很多其他库函数和所需要的辅助数据结构;如上图所示的program1和program2分别包含program1.o和program2.o两个模块,并且他们还公用lib.o模块;在静态链接情况下,因为program1和program2都用到了lib.o模块,所以它们同时在链接输出的可执行文件program1和program2有两个副本。当我们同时运行program1原创 2020-10-13 16:54:55 · 154 阅读 · 0 评论 -
《程序员的自我修养》p6 可执行文件的装载与进程
进程虚拟地址空间每个程序被运行起来以后,都将拥有自己独立的虚拟地址空间,这个虚拟地址空间的大小由计算机的硬件平台决定,即由CPU的位数决定。一般来说,C语言指针大小的位数与虚拟空间的位数相同我们下文以32位的地址空间为主进行讨论:整个4GB被划分为两部分,其中操作系统本身用去了一部分:从地址0xC0000000到地址0xFFFFFFFF,共1GB;剩下的0x00000000到0xBFFFFFFF共3GB都是留给进程使用的;也就是说整个进程在执行的时候,所有的代码、数据包括通过C语言malloc()原创 2020-10-09 17:32:21 · 312 阅读 · 0 评论 -
《程序员的自我修养》p3 关于目标文件
目标文件的格式目标文件中的信息以“段”的形式存储:程序源代码编译后的机器指令经常被放在代码段:.code 或 .text已初始化的全局变量和局部静态变量经常放在数据段:.data未初始化的全局变量和局部静态变量保存在 .bss段,注意:.bss段为未初始化的全局变量和局部静态变量预留位置,并没有内容,所以它在文件中也不占据空间挖掘SimpleSection.oobjdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它以一种可阅读的格式让你更多地了解二进制文件可能带有的附.原创 2020-10-09 10:42:22 · 425 阅读 · 0 评论 -
《程序员的自我修养》p2 编译和链接过程
GCC编译器:https://blog.youkuaiyun.com/liubing8609/article/details/82695528a.out是GCC可执行文件,这样是一次性完成了编译链接的全部过程被隐藏的过程Gcc的编译流程分为了四个步骤:预处理,生成预编译文件(.文件):gcc –E hello.c –o hello.i编译,生成汇编代码(.s文件):gcc –S hello.i –o hello.s汇编,生成目标文件(.o文件):gcc –c hello.s –o hello.o链接..原创 2020-10-09 10:33:05 · 293 阅读 · 0 评论