编译器和解释器的区别

 

解释器不需要编译,在运行时需要解释器来分析,转化,解释,执行.

编译器将代码文件转换为目标文件:目标文件分为三部分:代码部分,数据部分,并生成一个符号表.代码部分指的是我们定义的函数,函数中当然会存在局部变量.代码部分就是我们定义的全局变量.符号表中定义每个变量是否可以全局引用,以及它所在的区域(代码区域或数据区域).

符号决议过程:每个目标文件所引用变量都能在其它目标文件中找到唯一的定义,整个链接过程就是正确的.

静态库是将多个目标文件进行打包.

动态库(.so)和静态库(.a)类似,但是使用的方式不一样,动态库为了解决代码的冗余拷贝,使用引用方式,因此也叫共享库.

静态库和动态库优缺点:静态库浪费内存,但是静态库解决依赖问题,部署很方便.动态库相反,省内存但是部署要考虑依赖问题.

可执行文件和目标文件的区别: 可执行文件是多个目标文件的数据段和代码段组合构成的,没有符号表.

编译器运行更快,直接编译为机器码.

c++编译.c生成.i(预编译,删除注释,文本替换,宏展开) .s(高级语言翻译为汇编) .o(汇编翻译为机器码) 。

python的内存模型

c++的指针实际上在栈区,栈区实际只保存堆区被引用的地址号。

栈:因为栈是连续的内存,操作通常集中在一个内存块的附近,有利于处理器的高速访问。

堆:因为一般申请的堆内存都是不连续的,所以访问起来也要慢一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值