本帖最后由 oggplay 于 2014-7-2 10:15 编辑
又回过头仔细看了一下。2张图表示32位系统函数调用的栈过程,其它细节隐去:
过程示例:
=====================================64位=============================
64位简介:
与32位不同:
64位浮点数运算依靠SSE2,不再依靠压栈(当然是浮点寄存器的栈)进行。
楼主 坚持的精神感染了我也要坚持了继续学习。
支持了 楼主
第4章、第5章目前来说对自己意义不大,先略过不看。
第6章存储器结构磕磕绊绊总算看完了,一道练习题结束第6章。
[\b]
感谢楼主分享~~
本帖最后由 oggplay 于 2014-8-6 10:14 编辑
好吧,第七章开始了,第七章 链接
静态链接的作用:符号解析和重定位
符号解析:将每个符号的引用和符号定义联系起来。
重定位:把每个符号和内存存储位置联系起来,然后修改所有对这些符号的引用,使得他们指向相应的存储位置。
==========================================================================================
例题:http://bbs.fishc.com/thread-50516-1-1.html
unix对多重定义的链接规则:
规则1:不允许有多个强符号。
规则2:如果有一个强符号和多个弱符号,那么选择强符号。
规则3:如果有多个弱符号,那么从这些弱符号中任意选择一个。
强符号:函数和已初始化全局的变量;弱符号:未初始化全局变量。
规则2、3会造成一些不易察觉的运行错误,有些链接器是不会主动发出定义多个符号的警告的。再看例子,IA32机器,double 8个字节,int4个字节,所以2.c中的-0.0会覆盖1.c中x、y的位置。结果是:x=0x0 y=0x80000000。