C语言内存分配
C语音内存分配分为以下几种:
1.栈区:
windows下,栈内存分配2M(确定的常熟),超出了限制报stack overflow
自动分配,释放
2.堆内存:
手动分配与释放,操作系统的80%
3.全局区或者静态去
4.字符常量区
5.程序代码区
分配方法
malloc(sizeof(int)*len)(或者calloc(len,sizeof(int)))
realloc:
缩小:缩小的那部分数据丢失
扩大:
后面有需要的内存空间,返回原指针
后面没有所需要的内存空间,找到合适的内存空间,拷贝数据到新的内存地址,返回新的的指针
如果申请失败,返回NULL,原来的指针p1任然有效
注意:释放内存需要判断
int* p2 = realloc(p1,sizeof(int)*(len+add))
if (p2 == NULL) {
printf("申请失败");
}
if (p1 != NULL) {
free(p1);
p1 = NULL;
}
if (p2 != NULL) {
free(p2);
p2 = NULL:
}
静态内存
静态内存是由栈空间分配的