1.内存划分
栈区:存储局部变量和函数参数(遵守先进后出规则。)
char *func(){
char string[ ] = “iphone”;
//此处是把常量区的字符串 “iphone” 拷贝到栈内存中
return string;//栈内存 返回是不安全的 禁止
}
常量区:整型常量,字符常量 ,字符串常量等 ( 常量占用内存,只读状态,不可修改)
const修饰 const int a = 2;
静态区(全局区):static int a = 5;(变量之前加 static ,该变量会存储在静态区)
注意:
①只初始化一次,
②若初始化没给值,默认值为0
③只有程序退出才释放(永久占用内存)
④全局变量存储在静态区(花括号外面定义的变量)
堆区:malloc 等内存分配函数分配的内存(手动分配,手动释放)
代码区:代码在编译后转换成二进制存放的区域
2.动态内存分配
malloc的使用:
int *a = malloc(8);
Stu *b = malloc(sizeof(Stu)*5 );
内存释放:
void free(void *)
3.其他内存分配函数
calloc:
void * calloc(unsigned n ,unsigned size);//分配n个size大小的空间,并清零
realloc:
void * realloc(void *p,unsigned newSize);//按给定的地址以及给定的大小分配内存
4.内存操作函数
初始化内存:
void *memset(void *s,int cmsize_t n);//从s指向的内存开始初始化n个字节的内容为 c;
内存拷贝:
void memcpy(void *dest,const void *sourse,size_t n);//从source指向的内存开始拷贝到 dest ,拷贝n个字节
内存比较:
int memcmp(const void *buf1,const *buf2,unsigned int count);//比较buf1和buf2指向的内存是否相等,比较count个字节