[软件资料] 三种类型的内存使用

[复制链接]
 楼主| AdaMaYun 发表于 2024-3-12 08:30 | 显示全部楼层 |阅读模式

自动存储:用于保存局部变量。当函数被调用时,就会创建一个新的自动存储区域,并在函数返回结果时删除。只有返回值会被保留,并被复制到调用它的函数的自动存储中。这意味着,返回一个指向局部变量的指针是不安全的,因为底层数据会被默默删除。自动存储通常被称为“栈”。


分配的存储:运行malloc() 会返回的内存类型,这种内存会一直保留,直到被 free() 函数释放,所以可以被传递到任何地方,包括返回给上级调用函数。通常被称为“堆”。

静态存储:在程序的整个生命周期内有效。在进程启动时分配,全局变量都存储在这里。

如果想通过一个函数“返回”内存,不必通过调用 malloc,可以直接将一个指向本地数据的指针传递给函数:

  1. void getData(int *data) {
  2. data[0] = 1;
  3. data[1] = 4;
  4. data[2] = 9;
  5. }
  6. void main() {
  7. int data[3];
  8. getData(data);
  9. printf("%d\n", data[1]);
  10. }

小小蚂蚁举千斤 发表于 2024-3-18 10:49 | 显示全部楼层
三种类型内存使用比较多,数据传递也很容易出错
小夏天的大西瓜 发表于 2024-3-19 20:59 | 显示全部楼层
运行malloc() 会返回的内存类型,这种内存会一直保留,直到被 free() 函数释放,所以可以被传递到任何地方,包括返回给上级调用函数。通常被称为“堆”。
中国龙芯CDX 发表于 2024-3-21 14:41 | 显示全部楼层
自动存储使用的比较多
jf101 发表于 2024-3-22 12:30 | 显示全部楼层
分配的存储,运行malloc() 会返回的内存类型,这种内存会一直保留
szt1993 发表于 2024-3-25 15:16 | 显示全部楼层
静态存储在程序的整个生命周期内有效。在进程启动时分配,全局变量都存储在这里。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

299

主题

2492

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部