动态内存分配

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个字节
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容