计算机内存,C语言怎么动态管理内存?linux C第50讲

小微 科技计算机内存,C语言怎么动态管理内存?linux C第50讲已关闭评论115字数 1333阅读模式
摘要内存动态管理在C语言代码中,定义一个变量,就会在内存中申请对应变量类型的空间,用于给变量存放数据。例如:long num; //定义long类型的变量,申请 4 个字节的内存空间c...

内存动态管理

在C语言代码中,定义一个变量,就会在内存中申请对应变量类型的空间,用于给变量寄存数据。例如:

long num; //定义long类型的变量,申请 4 个字节的内存空间文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

char buf[8]; //定义数组,数组元素是char类型,每一个元素占用1个字节空间,数组总共占用8个字节空间;文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

那么,咱们来开发一个藏书楼管理系统,在代码中定义一个函数,获取藏书楼中图书的数量,代码如下:文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

程序编译运行的结果如下:文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

可以看到,编译的时候,有一个“warning”正告,提醒在get_book_num函数中返回一个局部变量的地址。文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

运行程序,调用get_book_num函数,在该函数中定义一个int类型的局部变量,如下:文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

int book_num = 168;文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

定义的book_num变量是一个局部变量,寄存藏书楼图书数量,然后,get_book_num函数返回该book_num变量的地址。文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

在main函数中,接管get_book_num函数的book_num变量的地址,然后,通过指针,走访book_num变量的值。终究,发现走访book_num变量的值,是过错的值,而不是get_book_num函数中定义的168这个数值。为何?文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

此时,就触及到两个问题:文章源自微观生活(93wg.com)微观生活-https://93wg.com/7325.html

局部变量生命周期的问题;

内存堆以及内存栈的问题;

搞清楚了这两个问题,就知道get_book_num函数返回的book_num变量地址为什么不可使用,咱们应当如何样设计程序,让get_book_num函数实现正确的功能。

一个程序被加载到系统中运行,程序中定义的变量、函数就会被加载到内存中,由CPU进行运算,运行程序。

那么,程序中定义的变量、函数加载到内存中,有两种存储区域:内存堆以及内存栈。它们有如下的定义:

内存栈上存储的数据,会被自动烧毁。数据的生命周期收场的时候,内存栈上的数据被肃清。

定义局部变量,是在内存栈上申请空间。局部变量的生命周期收场时,该变量就会从内存栈上肃清。

内存堆上存储的数据,不会被自动烧毁。必需在代码中进行释放(开发人员必需要手动释放),否则程序不会自动烧毁内存堆上的数据。

此时,咱们学习了内存栈以及内存堆的定义,就知道了上面程序问题的缘由,是由于:

在get_book_num函数中定义的book_num变量是局部变量,该变量是在内存栈上申请空间,寄存book_num变量的数据。

在main函数中调用get_book_num函数,获取内存栈上book_num变量的地址,并寄存到pnum变量中。然而,退出get_book_num运行以后,book_num局部变量被烧毁。

book_num局部变量在内存栈上被烧毁以后,pnum指针寄存book_num变量的地址,通过pnum指针走访book_num变量的值,就是一个随机的数据(由于,局部变量已经被烧毁)。由于book_num局部变量在内存栈上被烧毁以后,地址被系统回收,从新寄存其他数据。

在上面的例子中,咱们调用get_book_num函数以后,再调用func函数,就是为了让程序操作内存栈,回收book_num局部变量的空间。

以上就是微观生活(93wg.com)关于“计算机内存,C语言怎么动态管理内存?linux C第50讲”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/7325.html