关于c语言动态分配内存的知识点的总结(总结)

来源:互联网 发布:sony 电视 知乎 编辑:程序博客网 时间:2024/06/05 08:01

内存分配函数的使用(自己总结的内存分配相关的知识,部分参考网上的知识)

malloc函数是动态分配一段堆上内存,并且返回该内存的首地址,该函数不对申请的空间进行清空操作;

   malloc是一个函数,需要包含头文件才能使用,malloc 函数本身并不识别要申请的内存是什么类型,它只关心内存的总字节数必须由使用者计算字节数;

       malloc 返回值的类型是void *, 将void * 转换成所需要的指针类型。 

   动态内存申请的原理:malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。如果无法获得符合要求的内存块,malloc函数会返回NULL指针,因此在调用malloc动态申请内存块时,一定要进行返回值的判断


2 calloc创建一个动态内存,并对这段内存空间用0进行初始化,除了具有malloc的特征之外

如果你是为字符类型或整数类型的元素分配内存,那么这些元素将保证会被初始化为零

如果你是为指针类型的元素分配内存,那么这些元素通常(但无法保证)会被初始化为空指针;

如果你是为实数类型的元素分配内存,那么这些元素可能(只在某些计算机中)会被初始化为浮点型的零。


         3 realloc函数原型extern void *realloc(void *mem_address,unsigned int newsize);意思是先在当前内存空间寻找空间,看是否满足扩展,如果现有空间之后有足够的扩展空间,就扩展。如果不满足,去别的地方重新建立一段内存空间,并将原始数据拷贝到新空间,自动释放旧空间


.        4 alloca函数使用头文件malloc.h,在栈上申请空间,用完自动释放,如果手动free会出错;alloca不具可移植性, 而且在没有传统堆栈的机器上很难实现。当它的返回值直接传入另一个函数时会带来问题,因为他分配在栈上.由于这些原因,alloca不宜使用在必须广泛移植的程序中, 不管它可能多么有用。栈内存由一个栈指针来开辟和回收,栈内存是从高地址向低地址增长的,增长时,栈指针向低地址方向移动,指针的地址值也就相应的减小;回收时,栈指针向高地址方向移动,地址值也就增加。所以栈内存的开辟和回收都只是指针的加减,由此相对于分配堆内存可以获得一定的性能提升。当前函数退出时,由于系统堆栈指针的调整,这块内存会被自动回收。


     malloccalloc realloc alloca返回的都是无类型的指针,都需要进行强制类型转换,在c中可能能通过编并运行,但是在c++中会报错,所以直接养成强转的习惯是必须的,在选择使用malloc还是calloc时,只需要考虑是否需要初始化。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝晚上不睡觉哭闹怎么办 婴儿晚上不睡觉哭闹怎么办 2月宝宝排便困难怎么办 3岁宝宝老是哭闹怎么办 2岁了囟门闭合晚怎么办 宝宝卤门闭合慢怎么办 手经常碰水脱皮怎么办 迅雷文件已移除怎么办 手机不读sd卡怎么办 g买卖卖错账号怎么办 森林被野人拖走怎么办 我的世界没有羊怎么办 黑魂3杀死铁匠后怎么办 幻境7下8走错了怎么办 换了手机号微信怎么办 微信游戏没了怎么办 找sf网站被劫持怎么办 护发精油抹多了怎么办 用了护发素洗头怎么办 电脑c盘空间不足怎么办 把水蛭吃肚子里怎么办 不小心喝到蚂蟥怎么办 水蛭喝进肚子里怎么办 蚂蝗钻入皮肤里怎么办 孩子屁眼红疼怎么办啊 宝宝屁眼红疼怎么办4岁 屁股眼上火很疼怎么办 屁股上火了很痛怎么办 脚被虫子咬肿了怎么办 人在低谷的时候怎么办 支付宝忘了密码怎么办 忘了支付宝账号怎么办 支付宝账号丢了怎么办 生完孩子奶水不足怎么办 生完宝宝没奶水怎么办 生完三天没奶水怎么办 生完孩子奶头小怎么办 生完孩子没有奶水怎么办 宝宝刚出生没奶怎么办 婴儿含着乳头睡怎么办 没满月的换奶粉怎么办