面试准备:RY多媒体算法

Posted by yZhang on May 19, 2025

1.常见八股

1.1 struct 定义 short、int、char 最后这个结构体的大小是多少?

结构体的内存大小由成员的大小(由sizeof运算符计算)和对齐规则决定,假设结构体的定义为:

1
2
3
4
5
struct Example {
    short s;  // 2字节
    int i;    // 4字节
    char c;   // 1字节
};

内存布局分析(以4字节对齐为例): short s:占用 0-1 字节。 int i:需对齐到 4 字节,因此从 4 开始,占用 4-7 字节。 char c:占用 8 字节。 总大小:8 + 1 = 9 字节。但结构体整体需对齐到最大成员(int 的 4 字节),因此填充 3 字节,最终大小为 12 字节。

注:编译器对齐规则可通过 #pragma pack(n) 修改对齐方式。

1.2 堆栈分别是干啥的?

1.2.1 栈

用于存储函数调用时的临时数据,例如:

  • 局部变量(如 int x = 10;)。
  • 函数参数(如 func(a, b) 中的 ab)。
  • 函数返回地址(调用结束后回到哪里继续执行)。

特点:自动管理,高效快速,大小固定,线程私有。

1.2.2 堆

用于动态分配不确定生命周期或大块的内存,例如:

  • 动态创建的复杂对象(如 new Object())。
  • 全局需要长期使用的数据(如缓存、文件内容)。

特点:

  • 手动管理:需要开发者主动分配(如 malloc、new)和释放(如 free、delete)
  • 灵活但复杂、空间较大、全局共享。

1.3 指针和引用有什么区别?

指针和引用都是变量,但两者的区别在于:

  • 指针可以直接指向任意内存地址,而引用只能指向对象。
  • 指针可以修改所指对象的值,而引用的值不可修改。
  • 指针占用内存大小相同,但引用占用内存大小相同或更小。