呼市达内IT教育学校

试听课 + 活动课
填写信息优先获取试听课

位置:学校首页 > 学校动态>呼市c++培训班哪家好

呼市c++培训班哪家好

  C++基础面试题

  1、一个C++源文件从文本到可执行文件经历的过程

  对于C/C++编写的程序,从源代码到可执行文件,一般经过下面四个步骤:

  1).预处理,产生.ii文件

  2).编译,产生汇编文件(.s文件)

  3).汇编,产生目标文件(.o或.obj文件)

  4).链接,产生可执行文件(.out或.exe文件)

  2、#include的顺序以及尖叫括号和双引号的区别

  1.#include的顺序的区别:

  头文件的引用顺序对于程序的编译还是有一定影响的。如果要在文件a.h中声明一个在文件b.h中定义的变量,而不引用b.h。那么要在a.c文件中引用b.h文件,并且要先引用b.h,后引用a.h,否则汇报变量类型未声明错误,也就是常见的某行少个“;”符号。

  2.#include尖括号和双引号的区别:

  1)#include<>,认为该头文件是标准头文件。编译器将会在预定义的位置集查找该头文件,这些预定义的位置可以通过设置查找路径环境变量或者通过命令行选项来修改。使用的查找方式因编译器的不同而差别迥异。

  2)#include"",认为它是非系统头文件,非系统头文件的查找通常开始于源文件所在的路径。查找范围大于<>。

  3、进程和线程,为什么要有线程

  1、和进程相比,它是一种非常"节俭"的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种"昂贵"的多任务工作方式。(资源)

  2、运行于一个进程中的多个线程,它们之间使用相同的地址空间,而且线程间彼此切换所需时间也远远小于进程间切换所需要的时间。据统计,一个进程的开销大约是一个线程开销的30倍左右。(切换效率)

  3、线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时,而且很不方便。线程则不然,由于同一进城下的线程之间贡献数据空间,所以一个线程的数据可以直接为其他线程所用,这不仅快捷,而且方便。(通信)

  除以上优点外,多线程程序作为一种多任务、并发的工作方式,还有如下优点:

  1、使多CPU系统更加有效。操作系统会增加当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。(CPU设计增加)

  2、改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序才会利于理解和修改。(代码易维护)

  4、C++11有哪些新特性?

  1)关键字及新语法:auto、nullptr、for

  2)STL容器:std::array、std::forward_list、std::unordered_map、std::unordered_set

  3)多线程:std::thread、std::atomic、std::condition_variable

  4)智能指针内存管理:std::shared_ptr、std::weak_ptr

  5)其他:std::function、std::bind和lamda表达式

  5、malloc的原理,brk系统调用干什么的,mmap呢?

  malloc的实现方案:

  1)malloc函数的实质是它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。

  2)调用malloc()函数时,它沿着连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户申请的大小相等,另一块的大小就是剩下来的字节)。接下来,将分配给用户的那块内存存储区域传给用户,并将剩下的那块(如果有的话)返回到连接表上。

  3)调用free函数时,它将用户释放的内存块连接到空闲链表上。

  4)到较后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链表上可能没有可以满足用户要求的片段了。于是,malloc()函数请求延时,并开始在空闲链表上检查各内存片段,对它们进行内存整理,将相邻的小空闲块合并成较大的内存块。

  brk和mmap:

  从操作系统角度来看,进程分配内存有两种方式,分别由两个系统调用完成:brk和mmap(不考虑共享内存)。

  1、brk是将数据段(.data)的较高地址指针_edata往高地址推;

  2、mmap是在进程的虚拟地址空间中(堆和栈中间,称为文件映射区域的地方)找一块空闲的虚拟内存。

  这两种方式分配的都是虚拟内存,没有分配物理内存。在次访问已分配的虚拟地址空间的时候,发生缺页中断,操作系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。

  在标准C库中,提供了malloc/free函数分配释放内存,这两个函数底层是由brk,mmap,munmap这些系统调用实现的。

 

领取试听课
温馨提示:为不影响您的学业,来校区前请先电话或QQ咨询,方便我校安排相关的专业老师为您解答
版权所有:搜学搜课(www.soxsok.com) 技术支持:搜学搜课网