深入理解动态内存分配与数据对齐
1. 动态内存分配概述
在编程中,动态内存分配是一项关键技术,用于在程序运行时获取和管理内存。与自动和静态变量不同,动态内存是在运行时分配的,其大小可能在分配时才确定。例如,当需要存储文件内容或用户输入时,由于文件大小和用户输入的长度未知,就需要动态分配内存。
2. 经典的动态内存分配函数:malloc()
在C语言中,malloc()是获取动态内存的经典接口。其函数原型如下:
#include <stdlib.h> void * malloc (size_t size);- 成功调用
malloc()会分配size字节的内存,并返回指向新分配区域起始位置的指针。 - 分配的内存内容是未定义的,不会自动清零。
- 失败时,
malloc()返回NULL,并将errno设置为ENOMEM。
以下是使用malloc()分配固定字节数和结构体的示例:
// 分配固定字节数 char *p; p = malloc (2048); if (!p) perror ("malloc"); // 分配结构体 st