尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

嵌入式-C++面经2

嵌入式-C++面经2
📅 发布时间:2026/6/19 16:45:42

一、问题总览

  1. cpp重载和重写的区别
  2. cpp虚函数表
  3. 指针和引用的区别
  4. linux的常用开发指令
  5. linux编译运行程序的指令
  6. 关键字inline
  7. 什么场景使用内联
  8. 如何避免内存泄露
  9. map和unordered_map
  10. 引用外部头文件双引号和尖括号的区别
  11. private、public、protected的区别
  12. new和malloc的区别

二、技术面

2.1 cpp重载和重写的区别

答:
img

  • 重载:函数名必须相同,但参数列表必须不同(参数类型、个数、顺序不同),与返回值类型无关。

  • 重写:子类函数必须与父类的虚函数函数名、参数列表、返回值类型完全相同(协变返回类型除外),且父类函数必须声明为virtual。

2.2 cpp虚函数表

答:
虚函数表(Virtual Table,简称 Vtable)是 C++ 实现多态(Polymorphism)的底层机制,用于在运行时确定应该调用哪个虚函数版本。它是编译器在编译阶段为包含虚函数的类生成的一张函数指针表,存储该类所有虚函数的地址。

2.1.1 单一继承场景

假设有父类Animal和子类Dog,其中Animal包含虚函数makeSound(),Dog重写该函数:

class Animal 
{
public:virtual void makeSound() { cout << "动物叫" << endl; }virtual void eat() { cout << "动物吃" << endl; }
};class Dog : public Animal 
{
public:void makeSound() override { cout << "汪汪叫" << endl; }// 未重写eat(),继承父类版本
};

编译器会生成两个虚函数表:
Animal 的虚函数表:[&Animal::makeSound, &Animal::eat]
Dog 的虚函数表:[&Dog::makeSound, &Animal::eat](重写的makeSound替换父类版本,eat继承父类)


Animal对象:
+----------+
| Vptr | --> 指向Animal的虚函数表
+----------+

Dog对象:
+----------+
| Vptr | --> 指向Dog的虚函数表(继承自Animal的部分)
+----------+


2.3 指针和引用的区别

img

img

2.4.1 关键区别对比
  • 指针
    • 本身是一个变量,占用内存空间(32 位系统 4 字节,64 位系统 8 字节),存储的是目标变量的地址。
    • 可以被重新赋值,指向其他同类型变量。
int a = 10;
int* p;       // 未初始化(野指针,禁止直接使用)
p = &a;       // 后续可指向a
p = nullptr;  // 可指向空
  • 内存
    • 声明时必须初始化,且一旦绑定某个变量,终身不能再绑定其他变量(从一而终)。
    • 只是目标变量的别名,不占用额外内存空间(编译器处理为常量指针,但语法上隐藏了指针特性)。
    • 一旦绑定变量,不能改变绑定对象(但可以修改目标变量的值)。
int a = 10, b = 20;
int& r = a;   // 正确:初始化绑定a
// int& r;    // 错误:引用必须初始化
r = b;        // 不是重新绑定,而是将b的值赋给a(r仍绑定a)

2.4 linux的常用开发指令

xxx

2.5 linux编译运行程序的指令

xxx

2.6 关键字inline

inline 是 C++ 中的一个关键字,用于建议编译器将函数调用替换为函数体本身(即 “内联展开”),以减少函数调用的开销(如栈帧创建、参数传递等),从而提高程序运行效率。

  • 核心作用:减少函数调用开销
    • 函数调用时,系统需要执行以下操作(有性能成本):
    • 保存当前函数的栈帧状态(返回地址、局部变量等)。
    • 传递参数,跳转到被调用函数的入口。
    • 函数执行完毕后,恢复栈帧并返回。

内联函数通过 “原地展开” 避免这些操作,适合短小简单的函数

2.7 什么场景使用内联

短小、频繁调用、性能敏感的函数才考虑内联,避免盲目使用导致代码膨胀。

2.8 如何避免内存泄露

  1. 优先使用智能指针(C++11 及以上)
  2. 避免手动管理动态内存
  3. 严格遵循 “谁申请,谁释放” 原则
  4. 避免在异常场景下泄漏

2.9 map和unordered_map

img

2.10 引用外部头文件双引号和尖括号的区别

img

2.11 private、public、protected的区别

img

4.12 new和malloc的区别

img

相关新闻

  • elk time
  • 详细介绍:【OpenHarmony】用户文件服务模块架构
  • 详细介绍:全新 CloudPilot AI:嵌入 Kubernetes 的 SRE Agent,降本与韧性双提升!

最新新闻

  • 2026上海钻石回收7家机构对比测评 本土标杆机构推荐 - 薛定谔的梨花猫
  • Flutter PullToRefresh与NestedScrollView集成深度解析:解决复杂滚动场景的终极指南
  • 宁波各区黄金回收测评 鄞州/海曙/江北变现哪家不压价 - 逸程
  • 2026深圳三大商圈黄金回收实测,逸程验金标准统一靠谱 - 逸程
  • K2.5技术解析:动态稀疏注意力与原生多模态架构
  • 2026杭州黄金回收避坑|认准商圈备案认证门店,杜绝虚高引流、到店压价 - 薛定谔的梨花猫

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号