解释器不需要编译,在运行时需要解释器来分析,转化,解释,执行.
编译器将代码文件转换为目标文件:目标文件分为三部分:代码部分,数据部分,并生成一个符号表.代码部分指的是我们定义的函数,函数中当然会存在局部变量.代码部分就是我们定义的全局变量.符号表中定义每个变量是否可以全局引用,以及它所在的区域(代码区域或数据区域).
符号决议过程:每个目标文件所引用变量都能在其它目标文件中找到唯一的定义,整个链接过程就是正确的.
静态库是将多个目标文件进行打包.
动态库(.so)和静态库(.a)类似,但是使用的方式不一样,动态库为了解决代码的冗余拷贝,使用引用方式,因此也叫共享库.
静态库和动态库优缺点:静态库浪费内存,但是静态库解决依赖问题,部署很方便.动态库相反,省内存但是部署要考虑依赖问题.
可执行文件和目标文件的区别: 可执行文件是多个目标文件的数据段和代码段组合构成的,没有符号表.
编译器运行更快,直接编译为机器码.
c++编译.c生成.i(预编译,删除注释,文本替换,宏展开) .s(高级语言翻译为汇编) .o(汇编翻译为机器码) 。
python的内存模型。
c++的指针实际上在栈区,栈区实际只保存堆区被引用的地址号。
栈:因为栈是连续的内存,操作通常集中在一个内存块的附近,有利于处理器的高速访问。
堆:因为一般申请的堆内存都是不连续的,所以访问起来也要慢一些。