内存分配包括
静态分配:编译时确定内存大小,不一定在编译时分配,比如:局部变量放在栈里.
动态分配:在编译时不知道内存多大,在运行时动态分配。
1.malloc函数
原型:void *malloc(size_t n)
n是分配内存的大小,返回分配内存块的首地址,分配失败,返回NULL.内存是由OS分配的。
返回类型void *是指经过强制转换可以赋值给任何类型。
2.free函数
原型:void free(void * p)
p是malloc申请的动态内存首地址,是不能改变的,malloc与free成对使用,不能少用,防止出现内存泄露,也不能多用,free之后,p=NULL,可以防止野指针出现。
动态分配内存特点:
A.内存空间大小可以是一个变量,其值在运行时确定。
B.内存空间在运行时分配,在程序结束时回收,内存分配由OS参与完成
C.动态分配的内存空间在未释放之前均可以被引用,保证其生命期.
内存分配函数类似的还有calloc ,realloc(参数里的*p,一定是malloc,calloc,realloc之一得到的地址)
静态分配:编译时确定内存大小,不一定在编译时分配,比如:局部变量放在栈里.
动态分配:在编译时不知道内存多大,在运行时动态分配。
1.malloc函数
原型:void *malloc(size_t n)
n是分配内存的大小,返回分配内存块的首地址,分配失败,返回NULL.内存是由OS分配的。
返回类型void *是指经过强制转换可以赋值给任何类型。
2.free函数
原型:void free(void * p)
p是malloc申请的动态内存首地址,是不能改变的,malloc与free成对使用,不能少用,防止出现内存泄露,也不能多用,free之后,p=NULL,可以防止野指针出现。
动态分配内存特点:
A.内存空间大小可以是一个变量,其值在运行时确定。
B.内存空间在运行时分配,在程序结束时回收,内存分配由OS参与完成
C.动态分配的内存空间在未释放之前均可以被引用,保证其生命期.
内存分配函数类似的还有calloc ,realloc(参数里的*p,一定是malloc,calloc,realloc之一得到的地址)
相关热门文章
给主人留下些什么吧!~~
评论热议