MST

星途 面试题库

面试题:Objective-C中结构体与联合体在内存分配上的差异

请阐述在Objective-C中,结构体定义与联合体使用时,内存分配的方式有何不同?并举例说明如何定义结构体和联合体,以及它们各自占用内存大小的计算方法。
16.3万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

结构体与联合体内存分配方式的不同

  1. 结构体:结构体的内存分配是按照其成员变量的顺序和类型依次分配内存,其占用内存大小是所有成员变量占用内存大小之和(考虑内存对齐)。各个成员变量在内存中是独立存储的,相互之间有明确的内存边界。
  2. 联合体:联合体所有成员变量共享同一块内存空间,其占用内存大小为其最大成员变量占用的内存大小。在某一时刻,只能使用联合体中的一个成员变量,对一个成员变量的赋值会覆盖其他成员变量的值。

结构体的定义与内存大小计算

// 定义结构体
struct Person {
    char name[20]; // 20字节
    int age;       // 4字节(假设在32位或64位系统中,int通常为4字节)
    double height; // 8字节
};

// 计算内存大小
// 由于内存对齐,name[20]后要对齐到8字节的倍数,即24字节
// age 4字节,加上后为28字节,也要对齐到8字节倍数,即32字节
// height 8字节,最终结构体占用内存大小为40字节

联合体的定义与内存大小计算

// 定义联合体
union Data {
    int num;    // 4字节
    double value; // 8字节
    char str[10]; // 10字节,实际按最大成员double的8字节对齐后为16字节
};

// 计算内存大小
// 联合体占用内存大小为最大成员变量(这里是double类型的value)的大小,即8字节(考虑对齐后为16字节)