内存管理函数

内存管理函数


宗旨:技术的学习是有限的,分享的精神是无限的。


一、 动态申请内存

1、 malloc/free

——动态分配内存和释放内存

(1)函数原型

void *malloc(size_tsize);
void free(void *str);

(2)函数参数

         size:要分配的空间大小

(3)返回值

         返回一个指向分配的连续存储域首地址的指针。失败返回NULL。

注意:调用free()释放内存就,不能再去访问被释放的内存空间,这块内存已经不属于原来的应用程序,此时是悬挂指针,为了安全起见,一般会再次将此指针变量置NULL;不能两次释放相同的指针;malloc与free配套使用。

array = (int *)malloc(10 * sizeof(int));
free(array);
array = NULL;<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

2realloc

         ——更改已经配置的内存空间

(1) 函数原型

void *realloc(void *ptr, size_t size);

(2)函数参数

        ptr:试图更改大小的原堆空间位置;

        size:新的内存大小

(3)返回值

        如果内存减少,malloc仅改变索引信息。

        如果增加内存,如果当前内存段后面有足够的内存空间,则直接扩展内存空间,realloc将返回原指针;如果当前内存段后面的字节数不足,那么久使用堆中第一个能够满足这一要求的内存块,将目前的数据复制到新的位置并将原来的数据块释放掉,返回新的内存块地址;失败返回NULL,此时原来指针仍有效。

new_addr = (int*)realloc(old_addr, 100 * sizeof(int));

 

3、 calloc

——malloc的简单包装,把动态分配的内存初始化为0

void*calloc(size_t nmemb, size_t size)
{void *p;size_t total;total = nmemb * size;p = malloc(total);if(p != NULL){memset(p, '\0', total);}
}// ptr =(struct data *)calloc(count, sizeof(struct data));<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

4、  alloca

void *alloca(size_t size)

——在栈中分配大小为size的内存,成功返回指针,失败返回NULL

 

二、内存数据管理函数

1、 memcpymemcpy(p2, p1, 10);

——内存拷贝

(1) 函数原型

void *memcpy(void *dst, const void *src, size_t size);

(2)  函数参数

        dst:复制后数据存储的首地址

        src:数据源地址

        size:复制大小

(3)返回值

        执行成功返回目的地址。

memcpy()与strncpy():str参数是char *,memcpy参数是void *,memcpy更加强大,strncpy只能用于字符串操作,memcpy不止。void *——“空即是色”——强大。

bcopy()函数类似于memcpy()【bcopy多用于网络编程中】

void bcopy(const void *src, void *dest,size_t size);<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

2、 memmove

——memcpy未考虑空间重叠,memmove考虑了。

(1)函数原型

void memmove(void *dst, const void *src, size_t size);

(2)函数参数

        dst:复制后数据存储的首地址

        src:数据源地址

        size:复制大小

(3)返回值

        执行成功返回目的地址。

memmove函数在复制之前,首先检查源地址和目的地址是否重叠,有,则进行处理再拷贝,没有则直接拷贝。

 

3、 memsetmemset(buffer, 0, sizeof(buffer));

——初始化指定内存

(1)函数原型

void *memset(void *s, int c, size_t size);

(2)函数参数

        s:待初始化的内存首地址

        c:初始化的值,一般写0

        size:要初始化的内存大小

(3)返回值

        执行成功返回s的首地址

bzero与memset:bzero效率高一些。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式的坑在哪方面?

在知乎看到的&#xff0c;觉得见解不错&#xff0c;看完我觉得会对嵌入式有些见解&#xff0c;分享给大家。今年毕业刚工作半年&#xff0c;稍微写一下自己的见解。嵌入式就个万金油&#xff01;干得活可以涉及硬件和软件&#xff01;永远学不完的知识。嵌入式工程师简直就是硬…

Orange-Classification,Regression

1.Classification Orange和sklearn一样&#xff0c;提供了Classification和Regression等机器学习的算法&#xff0c;具体使用如下&#xff1a; import Orangedata Orange.data.Table("voting") lr Orange.classification.LogisticRegressionLearner() rf Orange…

CentOS、Ubuntu、Debian三个linux比较异同

Linux有非常多的发行版本&#xff0c;从性质上划分&#xff0c;大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本。 商业版本以Redhat为代表&#xff0c;开源社区版本则以debian为代表。这些版本各有不同的特点&#xff0c;在不同的应用领域发挥着不同的作用&a…

再见,杀毒软件之父,王江民!

王江民&#xff0c;中国最早的反病毒专家&#xff0c;被业界尊称“中国杀毒软件之父”、“中国反病毒第一人。以38岁为分界&#xff0c;王江民的前半生&#xff0c;是中国青年身残志坚的楷模&#xff0c;他的后半生是中国安全软件的奠基人&#xff0c;带领中国商用软件第一个走…

arm流水线相关

不管是arm几,只要是在执行指令时采用的是流水线机制,前3级的都是:取指->译码->执行.在"执行"阶段,pc总是指向该指令地址加8字节的地址.换句话说,pc总是指向正在执行的指令地址再加2条指令的地址.之所以是2条指令,是因为在"执行"阶段前还有"取指…

C语言——回调函数

C语言——回调函数 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 如果参数是一个函数指针&#xff0c;调用者可以传递一个函数的地址给实现者&#xff0c;让实现者去调用它&#xff0c;这就是回调函数。 void func(void (*f)(void*), void *p) 提供…

百面机器学习——第一章特征工程

特征工程&#xff1a;是对原始数据进行一系列工程处理&#xff0c;将其提炼为特征&#xff0c;作为输入供算法和模型使用。从本质上来讲&#xff0c;特征工程是一个表示和展现数据的过程。在实际工作中&#xff0c;特征工程旨在去除原始数据中的杂质和冗余&#xff0c;设计更高…

C语言不调用库函数画一个三角形

这个是知乎上面的一个题目&#xff0c;非常有意思&#xff0c;晚上打球回来就下决心要写代码实现下&#xff0c;再加上自己剖析&#xff0c;让大家明白一个三角形在坐标系中如何用C语言画出来的。https://www.zhihu.com/question/53832071/answer/1625616415第一步就是要先构建…

JS高级——变量提升

JS执行过程 1、首先是预解析&#xff1a;预解析过程最重要的是提升&#xff0c;在JavaScript代码在预解析阶段&#xff0c;会对以var声明的变量名&#xff0c;和function开头的语句块&#xff0c;进行提升操作 2、执行操作 全局中解析和执行过程 <script>console.log(a);…

ocs 2007技巧:查看存档服务记录的消息内容

要查看存档服务记录的消息内容&#xff0c;请进入SQL&#xff0c;运行下列命令&#xff1a;USE LcsLogGOSELECT * FROM Messages转载于:https://www.cnblogs.com/kksip/archive/2008/01/08/1030858.html

图像多分类——卷积神经网络

例子参考&#xff1a;https://www.jiqizhixin.com/articles/2019-05-15-2 数据集&#xff1a;https://www.cs.ccu.edu.tw/~wtchu/projects/MoviePoster/index.html 将获取到原始数据集&#xff0c;其中&#xff0c;有三个文件&#xff0c; Movie Poster Dataset是1980-2015年…

C语言——可变参数

C语言——可变参数 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 1、目前为止&#xff0c;见过比较熟悉的可变参数的函数就是printf()函数 int printf(const char *format, …);<span style"font-family: Arial, Helvetica, sans-serif; back…

学习C++,知识点太多记不住怎么办?

学习一门新的编程语言之前&#xff0c;你首先会做什么&#xff1f;先熟悉变量、运算符、函数、类和结构、测试等工具&#xff0c;随后按照指导按部就班进行操作&#xff1f;这样的流程对于学习其他语言如Python、Java来说或许行得通&#xff0c;但C的话&#xff0c;够呛。想要真…

【转】建立公用程序库,提升软件开发生产力

当我们谈及软件开发的生产力时&#xff0c;其实有相当多的因素在影响着。举凡程序人本身的素质、所使用的程序语言、应用程序框架&#xff08;Application Framework&#xff09;的选择、是否具备好的开发工具&#xff08;例如IDE、程序代码产生器&#xff09;、对开发环境的熟…

vim使用指南

1 删除 https://www.jianshu.com/p/ab7936af747c 转载于:https://www.cnblogs.com/zhaoyz/p/8341231.html

C语言编程规范 clean code

目的规则并不是完美的&#xff0c;通过禁止在特定情况下有用的特性&#xff0c;可能会对代码实现造成影响。但是我们制定规则的目的“为了大多数程序员可以得到更多的好处”&#xff0c; 如果在团队运作中认为某个规则无法遵循&#xff0c;希望可以共同改进该规则。参考该规范之…

DataWhale组队-Pandas(下)缺失数据(打卡)

1.缺失值概要 数据的缺失主要包括记录的缺失和记录中某个字段信息的缺失&#xff0c;两者都会造成分析结果的不准确&#xff0c;以下从缺失值产生的原因及影响扥方面展开分析。 &#xff08;1&#xff09;缺失值产生的原因 1&#xff09;有些信息暂时无法获取&#xff0c;或…

状态机——protothreads

状态机——Protothreads 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、prothreads的优缺点 优点&#xff1a; 1. 以纯C语言实现&#xff0c;无硬件依靠性&#xff1b;因此不存在移植的困难。 2. 极少的资源需求&#xff0c;每个Protothread仅需要…

南橘北枳

春秋战国时期&#xff0c;智者晏子曾经说过一句话&#xff1a;“桔生淮南为橘&#xff0c;生于淮北为枳”&#xff0c;说的是淮南香甜的橘子移植到淮北就变成苦涩难吃的枳。因为事物的条件和环境等变了&#xff0c;所以才会这样。这句话现在大多是针对人品说的&#xff0c;大概…

CentOS经常使用文件操作命令[百度博客搬家]

路径操作的CentOS经常使用命令 如今整理例如以下&#xff08;百度博客搬家) cd pwd NO1. 显示当前路径 [rootrehat root]# pwd NO2. 返回用户主文件夹 [rootrehat root]# cd NO3. 改变到其他路径 [rootrehat root]# cd /etc NO4. 返回到上一级文件夹 [rootrehat root]…