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:
}
静态内存
静态内存是由栈空间分配的,由系统自动分配,自动释放(随机释放)
main() {
int* p;
func(&p);
printf("%#x",*p);//不确定
printf("%#x",*p);//不确定
printf("%#x",*p);...
}
void func(int**

本文介绍了C语言中内存分配的几种类型,包括栈区、堆内存、全局区或静态区、字符常量区和程序代码区。重点讲解了静态内存的自动分配与释放,以及动态分配中malloc、free和realloc的使用,强调了内存分配注意事项。

3134

被折叠的 条评论
为什么被折叠?



