1、C++ 可执行程序的内存分布

BSS:Block Started by Symbol 
存放程序中未初始化的全局变量 
数据段: 
存放已初始化的全局变量,静态内存分配 
代码段: 
存放执行代码 
堆heap: 
存放运行中动态分配的内存段,可扩张或缩减 
栈stack: 
存放程序的局部变量,在函数被调用时,栈还用来传递参数和返回值

2、C++编译原理

1、预编译:宏展开过程 
2、编译:inline在此时展开,从C++代码到汇编语言 
3、汇编:汇编语言到机器语言 
4、链接 
引申:内联函数和宏: 
两者都可以节省函数栈的开销,提高运行效率。因为函数在运行时需要保持现场和上下文后恢复现场,有时间和空间的开销 
宏在调用时直接展开,更有效率,但不能使用私有成员,不能调试,容易产生二义性 
内联函数由编译器展开

3、C++ extern关键字的作用

加在变量或函数前,表明该内容的定义在其他文件中。 
extern “C” 提示C++编译器按C语言的规则编译函数,举例: 
C++生成的动态库.so文件,如果按C++命名,则函数的名称会因为继承等原因变化,比如func()会变成func_%20(),其他程序调用dlopen动态打开该库时,按照func名称会搜索不到相应的函数。

4、static关键字的作用

在全局变量中加static,称为静态全局变量有以下特点: 
在数据段中存放 
会被自动初始化成0 
在文件之外不可见

另外,static修饰函数,可以使其成为类的静态成员函数,成员变量和类相关,和类的对象无关。 
及时没有具体对象,也能调用类的静态成员函数——单例模式

5、const关键字的作用

主要有四个方面:常量、函数输入、函数输出、成员函数,都是为了让被修饰的内容受到保护,防止意外修改 
1、const修饰常量,最常用,常量不让修改 
2、const修饰输入参数: 
void StringCopy(char dest,const char source),函数体内任何修改source的行为都会报错 
3、如果输入参数采用值传递,由于函数会在栈中自动产生临时变量的复制(拷贝构造函数),因此参数不用加const 
void func(int x)不能用void func(const int x) 
4、引用传递比值传递效率高,但是缺点是参数可能被修改,因此也可以加const修饰 
void func(A& a) –> void func(const A& a) 
5、用const修饰函数的返回值 
如果以指针传递的方式返回,且被const修饰,则赋值给其他指针变量的时候,要求指针也得用const声明: 
const char * GetString(); 
char * str=GetString();——报错 
const char *str=GetString();——正确

如果是值传递,由于函数会自动复制的关系,加const没用

6、const修饰成员函数

任何不会修改数据成员的函数都应声明为const类型 
1、在const成员函数中,不慎修改了数据成员,会报错 
2、在const成员函数中,不慎调用了其他非const成员函数,报错

7、static、const、static const的初始化

1、在类里创建一个const类型变量时,不能给他初值 
理由:编译器必须为const类型变量分配存储空间,但类的声明又不占用存储空间 
class foo 

private: 
const int a= 100;——报错 

只能在构造函数的初始化列表里初始化: 
A::A(int a):bb(a),其中bb的声明为 const int bb; 
2、static修饰的类成员变量,既不能在类定义中初始化,也不能在初始化列表里初始化,只能在外头 
int foo::a=100; 
3、static const也是在类外初始化

8、C++中,new和malloc的区别

new是c++的操作符,malloc是c中的函数 
new可以调用构造函数 delete调用析构函数 
malloc只是单纯的分配内存,不会初始化成员

9、关于C++ 多态和函数表的关系

多态的定义:一个接口,多种方法 
多态和非多态的区别,可以理解为静态编译(重载)和动态编译(虚函数) 
多态是通过虚函数表来实现的,重载在编译时就确定了函数的地址,虚函数的运行地址只能在运行过程中才能确定

10、C++虚函数与构造、析构函数的关系

1、构造函数不能使虚的 
理由:存在虚函数的话,会存在虚函数表vtable,构建的对象会有一个vptr指向虚函数表,所以不能把构造函数放虚函数里 
2、析构函数一般都是虚的 
如果是实的,那么当有一个基类指针指向派生类,那么析构时只会析构基类的成员,造成派生类的成员没有正确释放 
只有是虚的,才会先在虚函数表中找到派生类,再找基类

如果类中有虚函数,不管有多少个,它派生出来的对象大小都会多4字节,是vptr:指向虚函数表的指针

11、C++ 构造函数、拷贝构造函数、赋值函数

1、构造函数、拷贝构造函数 
特点都是“无中生有” 
A a——通过默认构造函数创建一个对象 
2、拷贝构造函数 
用一个类的对象去初始化另一个对象时: 
A b=a; 
A b(a); 
都使用的拷贝构造函数 
浅拷贝:复制一个指针,指向同一个地址空间 
深拷贝:在内存中开辟新的空间,两个对象独立 
拷贝构造函数的声明: 
A(const A& a)

赋值运算函数: 
A& operator=(const A& a)

Linux技术 
1、epoll和select 
当一个程序要读两个以上IO时,如果使用阻塞式IO,那么一个文件描述符阻塞,另一个文件描述符有数据却读不出来,效率很低。 
解决方案有以下几个: 
1、开一个描述符就起一个线程,维护起来比较复杂 
2、用非阻塞IO,得一直轮询 
3、用异步IO,通过信号量或者回调触发 
4、IO多路复用(epoll和select)

C++基础知识简答题相关推荐

  1. 大学计算机基础知识简答题,大学计算机基础简答题汇总(题库).doc

    计算机与信息表示基础习题 四.简答题? 1.?简述计算机的发展历程?? 答:(1)第一代:1946---1958年,电子管计算机: (2)第二代:1958---1964年,晶体管计算机: (3)第三代 ...

  2. 计算机基础知识简答题汇总,计算机基础(简答)

    计算机基础知识 简述计算机的发展经历了那几个阶段? 人们根据计算机采用的主要元器件的不同,将电子计算机的发展分为四代: 第一代(1946年-1956年)为电子管计算机,也叫真空管计算机,其主要逻辑元件 ...

  3. 计算机网络基础常考简答题,计算机网络基础知识简答题

    查询资料,完成以下简答题: 1. 计算机网络由几部分组成?各部分起什么作用? 答:计算机网络系统是由计算机系统.数据通信和网络系统软件组成的,从硬件来看主要有下列组成部分: (1)终端:用户进入网络所 ...

  4. 计算机网络基础实验简答题,计算机网络基础实验报告.doc

    计算机网络基础实验报告 计算机科学与技术系 实 验 报 告专业名称课程名称计算机网络基础项目名称局域网组网实验班 级学 号姓 名同组人员实验日期实验目的与要求: (一).实验目的: 通过组建局域网,了 ...

  5. 100个网络基础知识简答

    注:文章内容仅用于本人日常学习记录 1. 什么是局域网? 计算机在局部位置中与小物理位置的其他网络设备之间的连接. 2. 什么是以太网? 是当今现有局域网采用的最通用的通信协议标准,基于 IEEE 中 ...

  6. 移动互联应用开发基础知识简答

    1.简述Android各个版本从1.0-12.0的演化更新内容. 答:(1)2008年9月发布的Android第一版:Android1.1:在Android 1.5版本之后开始为每一个版本以甜品的形式 ...

  7. 计算机中被选中会是什么颜色,计算机基础考试-简答题

    一.模板,母板和版式各有什么作用? 模版是设计模版,它里面即有版式,又有背景; 母板:当想让每张幻灯片发生整体变化时(如:格式.多个图形之类的),可以用母板: 版式:主要用于改变幻的布局. 二.幻灯片 ...

  8. 视频教程-2021软考系统集成项目管理工程师视频教程精讲 基础知识(上)-软考

    2021软考系统集成项目管理工程师视频教程精讲 基础知识(上) 河北师范大学软件学院优秀讲师,项目经理资质,担任操作系统原理.软件工程.项目管理等课程教学工作.参与十个以上百万级软件项目管理及系统设计 ...

  9. 大学计算机应用基础第三版简答题答案,大学计算机应用基础习题答案

    第一章计算机基础知识 一.填空 1.硬件软件 2.控制器 3.冯·诺依曼 4.CPU主频 5.系统软件应用软件 6.数据总线地址总线控制总线 7.柱面磁头号扇区 8.分辨率 9.主键盘区功能键区数字键 ...

最新文章

  1. linux调试C++错误: 程序中有游离的‘\240’‘\302’
  2. 迁移学习前沿研究亟需新鲜血液,深度学习理论不能掉链子
  3. js float 取精度
  4. git、github、gitlab、gitee都是什么?
  5. 传输层:IP 地址解析 路由转发
  6. php mvc教程 文档,PHP培训教程教你快速打造PHP MVC框架[PHP基础教程]
  7. C++ rand,srand用法
  8. 目录访问共享C#怎么访问共享目录
  9. QT生成可执行的EXE程序
  10. oracle中批量删除xxx开头表的数据和批量修改以xx开头字段的值
  11. js点击页面其他地方如何隐藏div元素菜单
  12. (2.3)【遥控型木马-灰鸽子】原理、使用方法
  13. deepin[idea添加桌面]
  14. 【后端学习之路】Browsers and how they work?
  15. 【转载】贵妃醉酒百态(原创)
  16. java比较炫的登录界面_教你写一个炫酷的Material Design 风格的登录和注册页面
  17. latex 中手写l的输入方法
  18. D2D,让通信更简单!
  19. mysql-8.0.13-winx64安装卸载配置使用教程
  20. 带你学MySQL系列 | “存储过程”学不会,那是你没有看这篇文章!

热门文章

  1. Linux统计文件行数、字数、字节数
  2. 为Windows Server 2012 R2指定授权服务器
  3. 通过mysql show processlist 命令检查mysql锁的方法
  4. java 后台开发关键词解释
  5. backtrader2
  6. java中 flush()方法
  7. 网络爬虫--13.数据提取之JSON与JsonPATH
  8. Django博客--5.让博客支持 Markdown 语法和代码高亮
  9. main的方法是Java_Java中的main()方法
  10. halcon学习(算子汇总)