1.内存分区,内存地址从低到高排列:代码区、常量区、静态区、堆区、栈区。
2.c中提供堆区供给开发者分配内存空间,动态内存分配函数malloc,calloc,realloc
(1)malloc函数的使用,原型为void *malloc(int length)参数为分配内存空间的大小:
//将内存分配4个字节给一个int型指针
//返回值为任何指针
//考虑到不同平台,可以使用sizeof(char)来确定一个字节
int *p = malloc(4);
*p = 4;
//要开辟一块 内存空间,首先要明白开发这块内存空间要干什么事情
//malloc函数 的内存的分配不负责清空内容
char *str = malloc(sizeof(char) * 8);
strcpy(str, "xiansen");
int *array = malloc(sizeof(int) * 6);
//对内存的释放
//无返回值,有一个参数,任意类型的指针
//释放内存只是对内存标记为可用,并没有对内存进行清空
free(p);
free(str);
free(array);
(2)calloc与realloc函数
//calloc函数在奉陪内存的时候清空所有内容效率略低
//参数1:分配多少内存 // 参数2:每个内存多大 // char *str= calloc(2, sizeof(char)); // 从新分配内存大小 // 参数1:给谁分配 // 参数2:重新分配大小 // printf("%p\n", str); // str = realloc(str, 100);3.内存操作函数
初始化内存:void *memset(void *s , int c , size_t n) //从s地址指向的内存开始初始化n个字节的内容为c;
拷贝内存:void *memcpy(void *dest,const void*source , size_t n) //从source指向的地址开始拷贝到dest拷贝n个字节;
内存比较:int memcmp(const void *buf1, const void*buf2, unsigned int count) 比较buf1,buf2的内存是否相同,比较count个字节;