)
一.数组封装1.数组封装为什么通过地址传递而非值传递节省内存叙述a.省时间数值拷贝b.省空间数值副本开辟二.动态内存1.动态内存中free出现崩溃的原因a.对同一份内存连续多次释放原因仅释放其内容而p所存的地址还在但地址中的数据已被释放即地址的空间不是有效空间再次释放则指针崩溃解决释放完内存后将指针置为空freeppNULL b.释放的是非堆区空间eg int arr10free arrc.free括号内需为堆区空间的起始地址2.free如何知道释放的内存大小int*pmalloc100则系统分配 指针头申请的字节数100B指针头又包含 size和magicfree时会从p往低地址便宜找到size和magic从而开始释放3.C语言中堆区和栈区的区别栈区效率高、自动管理、无碎片适合小体量、短生命周期的数据堆区灵活但效率低、易碎片、需手动管理仅在分配大量/大块内存时使用。两者越界都会导致程序崩溃或内存结构破坏4.为什么要进行内存对齐内存对齐的优点①.内存对齐是数据在内存中的起始地址按一定的规则进行排序②优点提升CPU 的效率原因a.内存划分的基本单位是字节CPU访问内存时并非逐字节读取而是通过内存总线按“块”读取一般以2B4B8B的倍数来读取内存块b.数据存储遵循内存对齐方式一次CPU读取周期即可完整获取数据不需要额外处理 若不遵循需要多次CPU读取周期使用字节块的拼接获取完整数据eg兼容硬件设置部分硬件不支持非对齐访问强行读取会触发硬件异常导致程序崩溃三.联合体1.数据在内存中的存储模式存储模式即内存存储的字节序即大小端问题Windows小端存储模式低位数据 存储到低地址位置大端低位数据 存储到高地址位置验证大小端的方法1.指针验证2.联合体验证