赞
踩
目录
17. 先有的语言,还是先有的编译器,第一个编译器是怎么产生的
局部变量:顾名思义其作用域属于局部,并不是像 static 那样属于全局性的;
全局的变量:意味着谁都可以随时随地访问,所以其放在数据段中。
堆:是程序运行过程中用于动态内存分配的内存空间,是操作系统为每个用户进程规划的,属于软件范畴;往高地址发展;
栈:也叫堆栈,是处理器运行必备的内存空间,是硬件必需的,但又是由软件(操作系统)提供的;往低地址发展;
很多知识都是通过实践后才搞明白的(不明白的地方可以先放一放啦~)
汇编语言本身就是机器指令的符号化,汇编语言编译器并不会添加额外的语句,因此汇编语言写的程序会更直接;
C 编译器往往会在背后加入额外的C语言代码来支撑一些功能,因此实际的代码量就变得很大,另外在编译阶段,C代码会率先被编译成汇编代码,然后再由汇编器将汇编代码翻译成机器指令。
先是设计好语言的规则,然后编写能够识别这套规则的编译器;
编译器只要能根据规则编译出指令/输出对应要求的文件即可(迷糊?)
解释型语言:也称脚本语言,本身是文本文件,输入到脚本解释器中;脚本中的代码在解释器看来与字符串无异,解释器时时分析这个脚本,动态根据关键字和语法来做出相应的行为;在CPU看来,只有解释器这个进程在运行,完全不知道脚本的存在;因此哪怕脚本中有错误,前面正确的部分也会正常执行。
编译型语言:先将代码编译称指令程序(若是有误则会无法通过编译),由操作系统加载到内存后,操作系统将 CS: IP 寄存器指向这个程序的入口,使它直接上 CPU 运行,其本身就是一个进程。调度器在就绪队列中能看到此进程,而解释型程序是无法让调度器“入眼”的,调度器只会看到该脚本语言的解释器。
内存是以字节为单位读写的,其最小的读写单位就是字节(即内存是按字节寻址的)。
小端字节序:数值的低字节放在内存的低地址处,数值的高字节放在内存的高地址;(因为低位在低字节,强制转换数据型时不需要再调整字节了)。
大端字节序:数值的低字节放在内存的高地址处,数值的高字节放在内存的低地址;(有符号数,其字节最高位不仅表示数值本身,还起到了符号的作用(?)。符号位固定为第一字节,也就是最高位占据最低地址,符号直接可以取出来,容易判断正负)。
编译器的转换原则:强制转换到低精度类型时,会丢弃数值的高字节位,只保留数值的低字节。
BIOS,DOS都是存在于实模式下的程序,由它们建立的中断调用都是建立在中断向量表( Interrupt Vector Table, IVT )中的,它们都是通过软中断指令 int 中断号来调用的。
BIOS 中断调用的主要功能是提供了硬件访问的方法,该方法使对硬件的操作变得简单易行。
DOS 是运行在实模式下的,故其建立的中断调用也建立在中断向量表中,只不过其中断向量号和 BIOS 的不能冲突,其也可以调用 BIOS 中断。
Linux 内核是在进入保护模式后才建立中断例程的,不过在保护模式下,中断向量表己经不存在了, 取而代之的是中断描述符表( Interrupt Descriptor Table, IDT )。
section 称为节:是指在汇编源码中经由关键字 section 或 segment 修饰,逻辑划分的指令或数据区域,汇编器会将这两个关键字修饰的区域在目标文件中编译成节,也就是说“节”最初诞生于目标文件中。
segment 称为段:是链接器根据目标文件中属性相同的多个 section 合并后的 section 集合,这个集合称为 segment,也就是段,链接器把目标文件链接成可执行文件,因此段最终诞生于可执行文件中,我们平时所说的可执行程序内存空间中的代码段和数据段就是指的 segment。
(目标文件—将汇编语言编译转换成目标机器平台上的机器指令?链接—将目标文件连接成可执行文件?)
“一种司空见惯的东西,即使不知道是怎么来的,但由于大脑经常被其训练,对其己经形成深刻的印象,似乎理所当然地接受了”
——其实遇到拦路虎的时候,真的不要太为难自己,可以不求甚解的,后面再回过头来多看看,学习本来就是需要反复理解记忆和运用的,实在理解不了,就先记忆一下,久而久之,兴许也就理解了!(这本书真的是,在传输知识的时候,还解决了我学习中的困惑,这些个情景真的都是一模一样啊
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/58696
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。