您的位置:首页 > 其它

动态内存分配如何工作?

2016-11-24 13:33 253 查看
如果它不是之前,它应该现在是明确的至少一个案例中的指针是有用的。如果没有一个指针来存储刚刚被分配的内存的地址,我们就无法访问为我们分配的内存了!

动态内存分配如何工作?

您的计算机有内存(可能是很多),可用于应用程序使用。当您运行一个应用程序时,您的操作系统将应用程序加载到内存中的一些应用程序中。您的应用程序使用的内存分为不同的区域,每个区域都有不同的目的。一个区域包含您的代码。另一个区域用于正常操作(跟踪函数调用,创建和销毁全局和局部变量等)。我们会更多地谈论那些后来的。然而,许多可用的内存只是坐在那里,等待着被传给程序,要求它。

当您动态分配内存时,您要求操作系统为您的程序的使用保留一些内存中的内存。如果它可以满足这个请求,它将返回该内存的地址到您的应用程序。从这一点上,您的应用程序可以使用这个内存,因为它希望。当您的应用程序是用内存来完成的,它可以将内存返回给操作系统给另一个程序。

与静态或自动内存,该程序本身是负责请求和处理动态分配的内存。

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

3
4
5
6
7
8
9
10
11
12
13
14
#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抛出异常。如果这个异常没有妥善处理(它不会,因为我们还没有覆盖的异常或异常处理程序会简单但),终止(崩溃)与未处理的异常错误。

在许多情况下,有新的抛出一个异常(或有你的程序崩溃)是不可取的,所以有一个新的替代形式,可以使用,而不是告诉新的返回一个空指针,如果内存不能分配。这是通过添加常数性病::新的关键字和配置类型之间不抛出:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐