学习笔记 2020-2-11

内存分配函数

在C语言中内存分配有动态和静态,静态内存分配是在编译时分配好的,典型代表就是局部变量。动态内存分配是通过malloc(), calloc(), realloc() 进行申请内存,这三个函数都是向堆中申请的内存空间。
有关于内存分配有很多说明 这里主要有以下几点:

  1. 函数原型
void *malloc(unsigned int num_bytes);
void free(void *ptr);
void * calloc(size_t num,size_t size);
void * realloc(void * ptr,size_t size);

返回类型是void * 任意指针,使用时需强制类型转换。

  1. free函数
    free函数用来进行内存释放,静态内存分配时,编译器根据内存定义的作用域和生存周期进行内存合理安排,尽可能减少内存浪费,当变量生存期结束后内存会被回收。而动态内存需要通过free函数进行内存释放,不然会造成内存泄漏。C语言如此,其他高级语言也有相应的内存回收措施,更高级一点JavaScript虚拟机会帮助程序员进行内存管理。

  2. malloc、calloc、realloc
    malloc()函数会向堆中申请一片连续的可用内存空间。

 void *malloc(unsigned int num_bytes)

calloc()函数会在返回地址之前将所申请的内存空间中的每个字节都初始化为0 。

void *calloc(size_t n, size_t size)

realloc尝试重新调整之前调用 malloc 或 calloc 所分配的 ptr 所指向的内存块的大小。

https://www.runoob.com/cprogramming/c-function-realloc.htm

void *realloc(void *ptr, size_t size)

这里需要注意的是当前指针指向是否有足够内存空间如果有扩大分配,没有则自动释放掉当前指针,重新分配内存空间并返回指针。
4、其他内存操作函数
void *memset(void *str, int c, size_t n);
void *memmove(void *str1, const void *str2, size_t n)
void *memcpy(void *str1, const void *str2, size_t n)

memmove和memcpy内存中叠处理不同:memmove保证重叠部分也拷贝成功 具体原因和拷贝方法有关

https://blog.csdn.net/li_ning_/article/details/51418400

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值