笔试题(5)-----2024/08/23

1.C++语言中使用“extern C”有什么作用。

告诉编译器这段代码是用 C 语言编写的,因为 C 语言不支持函数重载,而 C++支持函数重载, 编译后的函数名不同。目的是实现C语言与C++ 语言的混合编程。

2.new delete 与 malloc free 的区别。

(1) malloc free 是库函数,需要加载头文件,new delete 是运算符,不需要加载头文 件。

(2)释放数组内存的时候,free(数组首地 址),delete[]数组首地址。

(3)new 申请内存的时候已经确定了数据类型,会有类型检查;malloc 申请内存的时候并没有数据类型的检查,需要强制类型的转化。

(4)malloc 申请内存的入参是申请内存的字节数,new 只需要指明数据类型和元素个数。

(5)new 一个对象的时候会自动调用该对象的构造函数,delete 一个指针的时候,会自动调用该对象的析构函数.而 malloc free 没有 这个功能。

3.内存泄露和内存溢出的区别

内存溢出就是要求分配的内存大小超出了定 义时所预设的内存大小,系统不能满足需求, 于是产生溢出。

内存泄漏是指向系统申请分配内存进行使用 (new),可是使用完了以后却不归还(delete), 结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也 不能再次将它分配给需要的程序。

4、什么是进程、线程,有什么区别?

进程是资源(CPU、内存等)分配的基本单位, 线程是 CPU 调度和分配的基本单位(程序执行 的最小单 位)。

同一时间,如果 CPU 是单核,只有一个 进程在执行,所谓的并发执行,也是顺序执行, 只不过由于切换速度太快,你以为这些进程在同步执行 而已。多核 CPU 可以同一时间点有多个进程在执行。

5、多进程、多线程的优缺点

说明:一个进程由进程控制块、数据段、代码段组成,进程本身不可以运行程序,而是像一 个容器一 样,先创建出一个主线程,分配给主线程一定 的系统资源,这时候就可以在主线程开始实现 各种功能。

当我们需要实现更复杂的功能时,可以在主线 程里创建多个子线程,多个线程在同一个进程 里,利用这 个进程所拥有的系统资源合作完成某些功能。

优缺点:

(1)一个进程死了不影响其他进程, 一个线程崩溃很可能影响到它本身所处的整 个进程。(2) 创建多进程的系统花销大于创 建多线程。

(3)多进程通讯因为需要跨越进 程边界,不适合大量数据的传送,适合小数据 或者密集数据的传送。多线程无需跨越进程边 界,适合各线程间大量数据的传送。并且多线 程可以共享同一进程里的共享内存和变量。

6、什么时候用进程,什么时候用线程

(1)创建和销毁较频繁使用线程,因为创建 进程花销大。

(2)需要大量数据传送使用线 程,因为多线程切 换速度快,不需要跨越进 程边界。

(3)安全稳定选进程;快速频繁选线程;

7、父进程、子进程

父进程调用 fork()以后,克隆出一个子进程, 子进程和父进程拥有相同内容的代码段、数据 段和用户堆栈。父进程和子进程谁先执行不一 定,看 CPU。所以我们一般我们会设置父进程 等待子进程执行完毕。

8、说明什么是上下文切换?

你可以有很多角度,有进程上下文,有中断上 下文。 进程上下文:一个进程在执行的时候,CPU 的 所有寄存器中的值、进程的状态以及堆栈中的 内容,当内核需要切换到另一个进程时,它需 要保存当前进程的所有状态,即保存当前进程 的进程上下文,以便再次执行该进程时,能够 恢复切换时的状态,继续执行。 中断上下文: 由于触发信号,导致 CPU 中断当前进程,转而 去执行另外的程序。那么当前进程的所有资 源要保存,比如堆栈和指针。保存过后转而去 执行中断处理程序,快读执行完毕返回,返回 后恢复上一 个进程的资源,继续执行。这就 是中断的上下文。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值