IOS面试题 --- 结构体相关

2021-04-29  本文已影响0人  ShawnAlex

问题1:

针对下面结构体 , 内存占用多少字节?
struct Struct1{
char a;
int b;
short c;
}struct1;

答案:

12字节

解释:

首先要知道内存对齐原则

  1. 数据成员对齐可以理解为min(m, n)公式, 其中m表示当前成员开始位置, n表示当前成员所需要的位数。如果满足 m 整除 n (m % n == 0), nm位置开始存储, 反之m循环+1, 直至可以整除, 从而确定了当前成员位置。

  2. 结构体的内存大小必须为结构体最大成员内存大小的整数倍, 不足需要补齐

那么有

验证:

问题1 验证

问题2:

针对下面嵌套结构体 , 结构体2(struct2)占用多少字节?

      struct Struct1{
          char a;
          int b;
          short c;
      }struct1;

      struct Struct2{
          int a;
          double b;
          char c;
          struct Struct1 struct1;
          short d;
      }struct2;

答案:

40 字节

解释:

建议先做下"问题一"

首先要知道内存对齐原则

  1. 数据成员对齐可以理解为min(m, n)公式, 其中m表示当前成员开始位置, n表示当前成员所需要的位数。如果满足 m 整除 n (m % n == 0), nm位置开始存储, 反之m循环+1, 直至可以整除, 从而确定了当前成员位置。

  2. 结构体的内存大小必须为结构体最大成员内存大小的整数倍, 不足需要补齐

  3. 数组成员为结构体, 当结构体嵌套结构体时, "成员"的结构体的自身长度为"成员"结构体中最大成员的内存大小, 例如结构体a嵌套结构体b,b中有char、int、double等,则b的自身长度为8

那么有

验证:

问题2验证

(持续更新....)

上一篇 下一篇

猜你喜欢

热点阅读