栈区:int a=3;
堆区:malloc(255) (所占内存最大)
静态区:static float h=1.36;
常量区 “lanou"
代码区:void function(){…}
内存地址,从上到下,内存地址越来越小。
栈内存分配由高到低(栈底是高位内存,栈顶是低位内存),先进后出
错误使用:
char *fun()
{//注意:此处是把常量区的字符串”iphone”拷贝到栈内存中
char string[]=“iphone”;
return string; //栈内存是不安全的,禁止
}
静态存储区:
1、只初始化一次
2、如果初始没给值,默认值为0
3、只有程序退出才释放(永远存在)
常量区:
常量占用内存,只读状态,决不可修改
错误使用:
char * string=“iPhone”;
string[0]=‘a’;运行崩溃
堆区:
malloc
void *malloc(unsigned int size);
size需要分配的字节数(例:3*sizeof(int))size=总的字节数
void free(void *);
释放内存,内存释放的标记是标记删除
calloc
void *calloc(unsigned n,unsigned size);
分配n个size大小的空间(n*size=总的字节数),并且把该内存上的所有字节清零
realloc
void *realloc(void *p,unsigned newSize);
newSize=总的字节数
memset
void *memset(void *s,int c,size_t n)
从s指向的内存开始初始化n个字节的内容为c(n=总字节数)
memcpy
void *memcpy(void *dest,const void *source,size_t n)
从source指向的内存开始拷贝到dest,拷贝n个字节(n=拷贝的总字节数)
int memcmp(const void *buf1,const void *buf2,unsigned int count)
比较buf1、buf2指向的内存是否相同,比较count个字节(count=比较的总字节数)
堆区与栈区