动态内存分配如何工作?
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抛出异常。如果这个异常没有妥善处理(它不会,因为我们还没有覆盖的异常或异常处理程序会简单但),终止(崩溃)与未处理的异常错误。
在许多情况下,有新的抛出一个异常(或有你的程序崩溃)是不可取的,所以有一个新的替代形式,可以使用,而不是告诉新的返回一个空指针,如果内存不能分配。这是通过添加常数性病::新的关键字和配置类型之间不抛出:
动态内存分配如何工作?
您的计算机有内存(可能是很多),可用于应用程序使用。当您运行一个应用程序时,您的操作系统将应用程序加载到内存中的一些应用程序中。您的应用程序使用的内存分为不同的区域,每个区域都有不同的目的。一个区域包含您的代码。另一个区域用于正常操作(跟踪函数调用,创建和销毁全局和局部变量等)。我们会更多地谈论那些后来的。然而,许多可用的内存只是坐在那里,等待着被传给程序,要求它。
当您动态分配内存时,您要求操作系统为您的程序的使用保留一些内存中的内存。如果它可以满足这个请求,它将返回该内存的地址到您的应用程序。从这一点上,您的应用程序可以使用这个内存,因为它希望。当您的应用程序是用内存来完成的,它可以将内存返回给操作系统给另一个程序。
与静态或自动内存,该程序本身是负责请求和处理动态分配的内存。
初始化动态分配的变量
当你动态分配一个变量,你也可以通过直接初始化初始化或统一的初始化(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抛出异常。如果这个异常没有妥善处理(它不会,因为我们还没有覆盖的异常或异常处理程序会简单但),终止(崩溃)与未处理的异常错误。
在许多情况下,有新的抛出一个异常(或有你的程序崩溃)是不可取的,所以有一个新的替代形式,可以使用,而不是告诉新的返回一个空指针,如果内存不能分配。这是通过添加常数性病::新的关键字和配置类型之间不抛出:
相关文章推荐
- 关于类静态成员变量指针通过动态分配的内存如何回收的探讨
- 动态内存分配:如何将两个字符串连接成单个字符串
- 如何不使用动态内存分配求一组整数的最小值
- 重读《深入理解Java虚拟机》二、Java如何分配和回收内存?Java垃圾收集器如何工作?
- C和C++如何动态分配和释放内存,他们的区别是什么
- 无OS情况下,8051如何实现动态内存分配
- MTK 使用数组模拟动态内存分配
- c语言中内存的动态分配与释放(多维动态数组构建)
- c语言中内存的动态分配与释放(多维动态数组构建)
- 动态内存分配与指向它的指针变量
- C语言学习9: malloc动态内存存储,动态内存分配去空格字符增长版,动态内存分配去符号incr增长版,型参和返回值都是int型的函数的指针,main函数的地址也可以用指针指向,typedef定义函数指针,函数定义与嵌套的作用,返回函数指针类型,const作用
- C++ 动态分配 和 内存分配和内存释放
- C++学习实战——通过动态分配内存打印杨辉三角
- 也谈C/C++的内存动态分配
- 【Unity3D】中如何分配内存占用(解决内存占用过大问题)
- 浅析动态内存分配及Malloc/free的实现
- C++动态内存分配---allocator类的原理与实现(一)
- 如何申请对齐的动态内存?
- 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点
- 如何确定Windows Server 2012中虚拟机的动态内存可用大小