动态内存分配如何工作?

来源:互联网 发布:梦幻妖子 知乎 编辑:程序博客网 时间:2024/05/23 01:15
如果它不是之前,它应该现在是明确的至少一个案例中的指针是有用的。如果没有一个指针来存储刚刚被分配的内存的地址,我们就无法访问为我们分配的内存了!
动态内存分配如何工作?
您的计算机有内存(可能是很多),可用于应用程序使用。当您运行一个应用程序时,您的操作系统将应用程序加载到内存中的一些应用程序中。您的应用程序使用的内存分为不同的区域,每个区域都有不同的目的。一个区域包含您的代码。另一个区域用于正常操作(跟踪函数调用,创建和销毁全局和局部变量等)。我们会更多地谈论那些后来的。然而,许多可用的内存只是坐在那里,等待着被传给程序,要求它。
当您动态分配内存时,您要求操作系统为您的程序的使用保留一些内存中的内存。如果它可以满足这个请求,它将返回该内存的地址到您的应用程序。从这一点上,您的应用程序可以使用这个内存,因为它希望。当您的应用程序是用内存来完成的,它可以将内存返回给操作系统给另一个程序。
与静态或自动内存,该程序本身是负责请求和处理动态分配的内存。
初始化动态分配的变量

当你动态分配一个变量,你也可以通过直接初始化初始化或统一的初始化(C++ 11):

34567891011121314#include <iostream> int main(){    int *ptr = new int; // dynamically allocate an integer    *ptr = 7; // put a value in that memory location     delete ptr; // return the memory to the operating system.  ptr is now a dangling pointer.     std::cout << *ptr; // Dereferencing a dangling pointer will cause undefined behavior    delete ptr; // trying to deallocate the memory again will also lead to undefined behavior.     return 0;}
规则:避免悬空指针,删除后的记忆,所有的指针指向被删除的记忆0(或nullptr在C++ 11)。
运营商新的可以失败
当从操作系统中请求内存时,在罕见的情况下,操作系统可能没有任何内存,以授予请求。
默认情况下,如果新的失败,一个bad_alloc抛出异常。如果这个异常没有妥善处理(它不会,因为我们还没有覆盖的异常或异常处理程序会简单但),终止(崩溃)与未处理的异常错误。
在许多情况下,有新的抛出一个异常(或有你的程序崩溃)是不可取的,所以有一个新的替代形式,可以使用,而不是告诉新的返回一个空指针,如果内存不能分配。这是通过添加常数性病::新的关键字和配置类型之间不抛出:

0 0
原创粉丝点击