精华内容
下载资源
问答
  • 实例化一个类有两种方式: // 假设有一个类A ...方式二则是在堆区(动态内存,大小任意,手动释放)分配一块内存,然后用指针a去指向这块内存; 那么我们很容易就知道为什么要使用动态内存分配来实例化

    实例化一个类有两种方式:

    // 假设有一个类A
    
    // 方式一:直接定义法
    A a;
    // 方式二:动态内存分配法
    A * a = new A();

    两者有什么差别呢?
    实际上,方式二即等价于如下代码:

    A * a = new A();
    
    等价于
    
    A * a;
    a = new A();

    方式一就是直接将a放入栈区(局部变量,大小受限,自动释放);

    方式二则是在堆区(动态内存,大小任意,手动释放)分配一块内存,然后用指针a去指向这块内存;

    那么我们很容易就知道为什么要使用动态内存分配来实例化一个类。

    原因:

    1.可以动态的申请空间,以便动态确定对象所需要的内存;
    2.便于储存大型对象,通常情况下栈区的大小容不下过于庞大的对象;
    3.传递指针比传递整个对象更方便高效;(当然对于一个变量也可以取地址,但是临时变量的地址是不能长久使用的,特别是返回临时变量的地址是大忌)
    4.同时传递指针可以便于大家共同维护一个空间,指针在传递的过程中,大家都可以修改指针指向的内容,当然要加锁进行保护,这样一处修改,处处修改,否则就要设置全局的变量,大家统一修改使用;

    举几个生动形象的例子解释以上三条原因:
    1. 每个人都要吃盐,盐不够了再去买显然比把这辈子要吃的盐一次性买下来要明智;
    2. 如果你是卖盐的,储存了很多盐,你只需要建一个仓库把盐放进去,然后自己记住仓库地址即可,而不需要把盐全部放在自己的家中;
    3. 如果要去很远的地方谈卖盐的生意,只需要选一些有代表性的信息(地址)给对方就可以了,不需要把整个仓库搬过去给对方看。

    4.比如a,b,c三个人一起卖盐,然后都知道仓库的地址,然后A卖的时候,知道地址就可以把盐取走,仓库里的盐变少了,这样b和c的仓库都被修改了,这样就达到了一个一处修改,处处修改,如果不是指针,而是给三个人都有一个全量的仓库,那么一个修改,另外两个不会修改。想到达统一,就得一个人修改,后再通知另外两个盐变少了多少。

    展开全文
  • 一、为什么要使用动态内存分配 二、动态内存分配作用 1.按照需要分配,根据需要内存分配,造成不浪费。当程序用完之后一定要记得及时释放,不然可能会照成内存泄漏。 C++内存分配和释放。 C语言内存分配和释放 ...

    特别提醒:栈区的空间大小是有限制的,window上一般是1M-2M。
    如果是堆的话,64位window系统的限制是2G。

    一、为什么要使用动态内存分配
    当我们要存储一组数据,然后又不知道数据有多大,如果使用数据的话,我们都知道定义数据,我们要知道数组的大小,还有数组的类型,当我们要保存一组数据,我们要定义多大的数组呢,如果定义数组很大的话,这样会造成资源浪费,如果定义小的话,又不够使用,然而动态内存可以帮我们实现这个问题,按需分配,造成不良费。
    我们的动态内存是保存在程序的堆区上,堆区的大小在2G左右。
    动态内存声明和释放
    C++ 中动态内存使用New 关键字类声明,使用Delete关键字释放。
    C语言中使用:
    例子:

    二、动态内存分配作用
    1.按照需要分配,根据需要内存分配,造成不浪费。当程序用完之后一定要记得及时释放,不然可能会照成内存泄漏。
    C++内存分配和释放。
    C语言内存分配和释放
    2.可以使用函数内部声明的变量。
    3.栈区的空间大小一般是1M-2M,堆区限制是2G,如果需要使用大内存,声明堆区。

    展开全文
  • C里面使用自动分配内存,比如说malloc分配自由存取区,就把它当作是在堆上分配的了, 他的好处是可分配的内存更大更灵活,理论上可以分配用户空间能使用的所有虚拟内存空间, 它是通过链式分配的,比如说有这样的一...
    C里面使用自动分配内存,比如说malloc分配自由存取区,就把它当作是在堆上分配的了,
    他的好处是可分配的内存更大更灵活,理论上可以分配用户空间能使用的所有虚拟内存空间,
    它是通过链式分配的,比如说有这样的一个语句 :
    int *p=(int *)malloc(sizeof(int))
    意思是,先在栈上创建一个int类型的指针变量,再在堆上分配4个字节大小的空间<32位>,再把创建的内存首地址赋给p。
    在上面这个题目中,p是在栈上分配的,就是所谓的自动动分配,最多能分配的好象是1M空间的大小,有的说是2M。正因为在堆上 分配的它不可以自动回收内存,所以要显试的调用free()来收回内存,还有就是如果p是局部变量的时候,一定要在p的作用域内调用free(),因为p 是在栈上分配的,一但清栈之后p的作用域没了,这个时候你要是想在其他地方调用free就没效果了,这个就象链表的头指针丢失 。
    当你学C++的时候,研究一下new和malloc吧

    (int*)意思是把后面的数据强制类型转换成整型的指针类型。

    malloc(sizeof(int))在堆上开辟一个4个字节的存储空间,并返回空间的首地址。

    手动分配内存的好处是可以实现内存的动态分配和回收。 
    因为如果使用静态分配,在编写程序时,很难预测变量使用量。比如说链表等数据结构,很难在编写程序时知道链表的长度,所以静态分配内存要么浪费资源,要么分配的不够。在使用某些递归算法时,更需要手动分配内存,否则就会像狗熊掰棒子一样只剩下最后一个了。 
    手动分配内存一定要注意回收。否则就会造成内存泄露

    静态分配是自动的
    存在栈上的数据是静态分配的 存在堆上的数据是动态分配的,堆是自由存储区。
    栈是先进后出(FILO)适合用于静态分配,计算机用来自动分配。
    展开全文
  • 动态内存分配原因

    2018-02-18 16:16:35
     关于这个问题应该归结到动态分配的好处上面了,跟指针到是没多大关系,只能说指针有指向动态分配内存块、访问内存块的功能。我觉得我也可以看看以前记录的关于动态分配的内容(为啥要进行动态分配)  • 栈空间...

    研究问题?

    1. 为啥要动态分配?
    2. 什么时候动态分配?

    要点:

    • 为啥要动态分配 什么时候动态分配
        关于这个问题应该归结到动态分配的好处上面了,跟指针到是没多大关系,只能说指针有指向动态分配内存块、访问内存块的功能。我觉得我也可以看看以前记录的关于动态分配的内容(为啥要进行动态分配)
        • 栈空间大小有限
        这主要是体现在较大的程序上面。动态局部变量是存储在栈上的,而且栈的空间有限,太大的程序就需要额外的空间来存储变量。这个时候就可以向堆索取动态的内存,即动态内存分配。
        • 申请一个与数据(如某文件)所需内存大小相宜的内存空间,避免空间的浪费,同时避免空间不够。
        在不知道数据有多大时,可以用一个较大的下标来定义 一个数组来存储相应的数据,这样一来有可能这个下标值不够大,造成数组上越界,也有可能下标值过大,造成内存浪费(在相应的程序块结束后才自动释放)。
        • 可以在不用堆内存空间时手动释放相应的空间(存在栈上面的数据要在相应的程序块运行结束时才会被释放)
        详情请见:http://blog.csdn.net/ms_ks_1217/article/details/9305687
    展开全文
  • C和C++动态内存分配与内存泄漏 一般文章或教程在介绍动态内存分配这个概念时候,会强调动态内存分配是在程序运行时根据需要对一个变量分配和...在下面这段代码里,数组变量 array占用的内存也是动态分配的,和上面
  • C语言系统自己管理内存分配的好处

    千次阅读 2013-09-05 15:12:31
    C语言系统没有内置的内存管理机制,通常是在需要使用内存的时候,动态的通过malloc在堆空间申请内存。这种做法有一定的缺陷,在较大的系统中往往会自己做内存分配管理,我想原因大致如下:   1)内存申请操作是比较...
  • C++动态内存分配

    2014-08-28 16:18:04
    而C++也是使用new来分配内存空间,但要手动使用delete来进行内存的释放 平常,我们也可以不使用new照样可以。那么我们为什么要使用new来操作呢,有什么好处?? 任何一类编程语言都分为4类内存区域: 有...
  • 一 静态内存分配 1. C语言全局变量、静态局部变量存储实在编译时确定,其存储空间实际分配在程序开始执行前完成。 2. 在栈上创建,比如局部自动变量,在执行进入变量定义所在...二 动态内存分配...
  • 在程序执行期间分配内存时,内存区域中这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中空间分配给函数参数和本地变量。在执行完该函数后,存储参数和本地变量内存空间会释放。堆中内存...
  • 堆区:存放动态内存分配 静态区:存放全局变量,静态变量 2. 动态内存函数介绍 malloc void *malloc( size_t size ); 功能:这个函数向内存申请一块连续可用空间。 返回值:返回指向这块空间指针。 与...
  • 在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量。... 使用动态内存很明显的好处就是:不需要预先分配存储空间且...
  • 在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地... 使用动态内存很明显的好处就是:不需要预先分配存储空间且分配的空间...
  •  在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量。在执行完该函数后,存储参数... 使用动态内存很明显的好处就是:...
  • 一 静态内存分配  1. C语言的全局变量、静态局部变量的存储实在编译时确定的,其存储的空间的实际分配在程序开始执行前完成。    2.... 以静态方式安排存储的好处主要是实现比较方便,效率高。
  • 在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和...使用动态内存很明显的好处就是:不需要预先分配存储空间且分配的空间可以根据...
  • C中的动态内存分配)   在linux平台下写的代码。 关于C语言指针的好处:不去抄书来后其他人讨论交流了,就根据自己写程序体会到的,轻言描述C语言指针有什么好处吧。功力有限,能记录多少就记录多少。 1) 指针...
  • C语言内存分配

    2019-07-10 16:56:00
    在程序的执行期间分配内存时,内存区域中的这个空间称为堆(heap)。还有另一个内存区域,称为栈(stack),其中的空间分配给函数的参数和本地变量。... 使用动态内存很明显的好处就是:不需要预先分配存储空间...
  • 栈上分配空间的好处是快,而且对象生存期是自动的,离开当前域之后就自动析构回收。坏处就是栈空间有限,而且不能人为控制对象的生存期,比如你无法将一个函数内部的栈上的对象返回,因为这个函数执行完毕后栈空间...
  • Java所谓动态分配

    2016-12-10 09:49:56
    Java本身(我目前接触到)没有专门的内存动态分配函数或是相应类,究其原因可能是因为其面向对象特性; 而如果非要使用动态内存,其实JAVA还是提供了解决方法;ArrayLIst: ArrayList是java为动态数组提供类1、...
  • C++实现一个简易的内存分配

    千次阅读 2017-12-22 16:44:55
    闲来无事突发奇想写个简单的内存分配器, 考虑到C++ 中的new 操作符可以很轻易的分配内存, ... 使用自己的内存分配的好处是,可以在某个已知可用的内存块上随意的进行小块内存的动态分配与释放,这样的话,不仅可...
  • 在C/C++开发中,动态分配内存(new/malloc)需要我们手动释放资源。这样做的好处是,需要申请多少内存空间可以很好的掌握怎么分配。但是这有个缺点,如果忘记释放内存,则会导致内存泄漏。在很多高级语言中(python/Go/...
  • 动态内存管理笔记

    2020-06-24 16:30:47
    基于以上原因,故需要动态内存管理,动态内存管理带来的好处有: 让我们在程序运行期间,来决定开辟空间的大小。申请多少就给多少。 有效使用空间。不会造成空间上的浪费问题。 可申请的空间更多。堆空间>栈空间...
  • 内存分配(全)

    2019-10-01 10:09:44
    使用动态内存很明显的好处就是:不需要预先分配存储空间且分配的空间可以根据程序的需要扩大或缩小,这样可以有效的使用内存空间。 对于非内部数据类型的对象而言,光用malloc/free无法满足动态对象的要求。对象...
  • C程序使用malloc、realloc等内存申请函数在堆上分配和释放内存的。 程序在执行期间有两个内存区域,一个是内存区域是栈(stack),另一个是堆(heap)。栈中的空间分配给函数的参数和本地变量,执行完该函数后,存储的...
  • 在C/C++开发中,动态分配内存(new/malloc)需要我们手动释放资源。这样做的好处是,需要申请多少内存空间可以很好的掌握怎么分配。但是这有个缺点,如果忘记释放内存,则会导致内存泄漏。在很多高级语言中(python/Go/...

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 283
精华内容 113
关键字:

动态分配内存的好处