鱼C论坛

 找回密码
 立即注册
查看: 1491|回复: 5

[已解决]申请动态内存的好处是什么,什么时候需要申请动态内存

[复制链接]
发表于 2019-5-9 21:29:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. #include "pch.h"
  2. #include <iostream>


  3. template <class T>
  4. class Ctest
  5. {
  6. public:
  7.         Ctest(T parr[], int len)
  8.         {
  9.                 m_parr = new T[len];//这里为什么要new出一块内存呢
  10.                 memcpy_s(m_parr, len * sizeof(T), parr, len*sizeof(T));
  11.                 m_len = len;
  12.         }

  13.         virtual ~Ctest()
  14.         {
  15.                 if (m_parr)
  16.                 {
  17.                         delete[] m_parr;
  18.                 }
  19.         }
  20. public:
  21.         int search(T ch);
  22. private:
  23.         T *m_parr;
  24.         int m_len;
  25. };

  26. template <class T>
  27. int Ctest<T>::search(T ch)
  28. {
  29.         for (int i = 0; i < m_len; i++)
  30.         {
  31.                 if (m_parr[i] == ch)
  32.                 {
  33.                         return i;
  34.                 }
  35.         }

  36.         return -1;
  37. }

  38. int main()
  39. {
  40.         using namespace std;
  41.         int arr[5] = { 1,89,45,7,2 };
  42.         Ctest<int>obj(arr, _countof(arr));
  43.         cout << "2是第" << obj.search(2) << "个元素" << endl;
  44. }

复制代码


问题:这段代码是查找数组里某个元素的位置,我的问题是为什么要new出一块空间来存放形参传来的数组,这样做的好处是什么
最佳答案
2019-5-10 13:47:14
1. 对一些数据非常小又要经常分配的数据,频繁的分配和释放会造成内存碎片的。
2. 栈上能分配的空间默认很小(1M)。使用动态申请,可以再堆上申请比这个远远大得多的内存。
    而且在有些时候,你并不知道需要多少空间,只有使用动态申请,以实现系统资源的有效利用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-9 21:33:24 | 显示全部楼层
是因为栈空间是有限的吗?所以一般操作都申请一块内存进行处理,是这样吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 22:32:13 | 显示全部楼层
mallco主要是在你内存不太够的情况下用来分配你的数据地址的,比如我做嵌入式,处理器的内存或者RAM没有PC大,我要搞个矩阵运算算不了,我就要申请mallco算,算一个free一个。
如果你在pc操作其实不用太注意mallco
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-9 22:35:28 | 显示全部楼层

回帖奖励 +1 鱼币

这个代码我的理解是 我一段数据mallco一段内存,它永远在这个内存里,直到程序结束或者释放或者覆盖它,好找
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-10 08:47:22 | 显示全部楼层
好处就是生命周期可以自己把控。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-10 13:47:14 | 显示全部楼层    本楼为最佳答案   
1. 对一些数据非常小又要经常分配的数据,频繁的分配和释放会造成内存碎片的。
2. 栈上能分配的空间默认很小(1M)。使用动态申请,可以再堆上申请比这个远远大得多的内存。
    而且在有些时候,你并不知道需要多少空间,只有使用动态申请,以实现系统资源的有效利用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 22:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表