栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

C++系统研发工程师知识储备(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++系统研发工程师知识储备(一)

C++系统研发工程师面试知识储备(一)

一、基本语言知识点

(一)编译型语言和解释型语言(二)强类型语言和弱类型语言(三)动态类型语言和静态类型语言(四)动态语言和静态语言(五)C++、 java、 python从语言特性上的区别(六)C++和C的区别(七)C++编译过程

一、基本语言知识点 (一)编译型语言和解释型语言

    编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码(二进制)(C、C++)

    (1)优点: 执行速度快、效率高
    (2)缺点: 编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,跨平台性差

    解释型语言的源代码不会直接翻译成机器指令,而是先生成中间代码,再由解释器对中间代码解释运行。在运行的时候才将源程序翻译成机器码,翻译一句,然后执行一句,直至结束。( Javascript、Python)
    (1) 优点:有良好的平台兼容性,
    (2) 缺点:执行速度慢、效率低

(二)强类型语言和弱类型语言

1、强类型语言也称为强类型定义语言。(C++、Java)

是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。一个已经被指定了数据类型的变量,除非是经过强制类型转换,否则无法被赋值为其他类型的数据

2、弱类型语言也称为弱类型定义语言。(Python)

与强类型定义相反。变量会自适应地去匹配数据类型 (三)动态类型语言和静态类型语言

    动态类型语言是指在运行期间才去做数据类型检查的语言,不是在编译阶段决定的,把类型绑定延后到了运行阶段。(Python)静态类型语言的数据类型是在编译期间确定的,或者说运行之前确定的,编写代码的时候要明确确定变量的数据类型。(C、C++、Java)
(四)动态语言和静态语言
    动态语言:程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等,在结构上的变化。(Python)静态语言:与动态语言相对,在程序运行时,结构不能发生改变。(C、C++、Java)
(五)C++、 java、 python从语言特性上的区别
    C++、Java和Python都是面向对象的编程语言。C++是编译型语言,Java、Python是解释性语言C++和Java都是强类型语言、静态类型语言,而Python是一种弱类型语言、动态类型。C++更接近于底层,方便直接操作内存。运行时间快。Java和C++相比使用更多的内存所以占用的内存就更大,启动时间慢Python是一种解释型的语言,比编译型语言的速度慢很多。python是动态型的语言,错误仅仅是在运行的时候展示的。比较容易学习,语法很简单,融入了很多现代编程语言的特性。python的库非常丰富,可以迅速地开发程序。
(六)C++和C的区别
    设计思想:
    (1)C++是面向对象的语言
    首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出
    (2) C是面向过程的结构化编程语言
    设计时首先要考虑的是如何通过一个过程,对输入进行运算处理后得到输出语法:C++具有封装、继承和多态三种特性;C++比C多了一些类型安全的功能,比如强制类型转换;C++支持范式编程,比如模板类、函数模板等
(七)C++编译过程

    第一步:编译:把文本形式的源代码翻译成机器语言,并形成目标文件

    (1) 预处理:做些代码文本替换工作。编译器执行预处理指令(以#开头,例如#include),这个过程会得到不包含#指令的.i文件。这个过程会拷贝#include 包含的文件代码,进行#define 宏定义的替换 , 处理条件编译指令 (#ifndef #ifdef #endif)等。
    (2) 编译:通过预编译输出的.i文件中,只有常量:数字、字符串、变量的定义,以及c语言的关键字:main、if、else、for、while等。这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。这个过程将.i文件转化位.s文件。
    (3)汇编:把汇编语言代码翻译成目标机器指令,生成目标文件(.o文件、.obj文件)。此过程会依赖机器的硬件和操作系统环境

    第二步:链接:链接程序的主要工作就是将有关的目标文件连接起来。这个过程将.o文件转化成可执行的文件。
    (1) 静态链接

特点:在生成可执行文件的时候(链接阶段),把所有需要的函数的二进制代码都包含到可执行文件中去。因此,链接器需要知道参与链接的目标文件需要哪些函数,同时也要知道每个目标文件都能提供什么函数,这样链接器才能知道是不是每个目标文件所需要的函数都能正确地链接。如果某个目标文件需要的函数在参与链接的目标文件中找不到的话,链接器就报错了。目标文件中有两个重要的接口来提供这些信息:一个是符号表,另外一个是重定位表。
优点:在程序发布的时候就不需要的依赖库,也就是不再需要带着库一块发布,程序可以独立执行。
缺点:程序体积会相对大一些。如果静态库有更新的话,所有可执行文件都得重新链接才能用上新的静态库。

(2)动态链接

特点:在编译的时候不直接拷贝可执行代码,而是通过记录一系列符号和参数,在程序运行或加载时将这些信息传递给操作系统,操作系统负责将需要的动态库加载到内存中,然后程序在运行到指定的代码时,去共享执行内存中已经加载的动态库可执行代码,最终达到运行时连接的目的。
优点: 多个程序可以共享同一段代码,而不需要在磁盘上存储多个拷贝。
缺点: 由于是运行时加载,可能会影响程序的前期执行性能。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782608.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号