内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
1,栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
2,堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动收。
3,自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
4,全局/静态存储区,全局变量和静态变量(static)被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
5,常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多,在《const的思考》一文中,我给出了6种方法)
明确区分堆与栈
首先,我们举一个例子:
void f()
{
int* p=new int[5];
}
这条短短的一句话就包含了堆与栈,看到new,我们首先就应该想到,我们分配了一块堆内存,那么指针p呢?他分配的是一块栈内存,所以这句话的意思就是:在栈内存中存放了一个指向一块堆内存的指针p。在程序会先确定在堆中分配内存的大小,然后调用operator
new分配内存,然后返回这块内存的首地址,放入栈中,他在VC6下的汇编代码如下:
00401028 push 14h
0040102A call operator new (00401060)
0040102F add esp,4
00401032 mov dword ptr [ebp-8],eax
00401035 mov eax,dword ptr [ebp-8]
00401038 mov dword ptr [ebp-4],eax
这里,我们为了简单并没有释放内存,那么该怎么去释放呢?是delete p么?错了,应该是delete []p,这是为了告诉编译器:我删除的是一个数组,VC6就会根据相应的Cookie信息去进行释放内存的工作。
分享到:
相关推荐
C++内存分配情况 C++内存分配是C++编程中的一個重要概念,它涉及到内存的管理和分配。在C++中,内存分成五个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。每个区的特点和使用场景都不同,了解这些区的...
C++内存分配详解 在C++编程中,内存管理是一个重要的概念,因为它直接影响到程序的性能和资源使用。内存主要分为四个主要区域:栈区、堆区、全局区(静态区)以及文字常量区。下面我们将详细探讨这些区域以及它们...
C++内存分配机制是C++编程中至关重要的概念,理解这一机制有助于开发者避免内存泄露问题,确保程序的稳定性和高效性。C++中的内存分为五个区域:栈、堆、自由存储区、全局/静态存储区和常量存储区。 1. 栈(Stack)...
理解并熟练掌握Windows内存管理和C++内存分配对于编写高效、可靠的程序至关重要。通过合理的内存管理,我们可以避免内存泄漏、提高程序性能,并确保系统的稳定性。在实践中,结合使用各种内存分配策略,可以更好地...
理解这些区域的功能和使用方式是理解C++内存分配的基础。 1. 栈:栈内存由编译器自动分配和释放,通常用于存放函数参数、局部变量等。它的特点是速度快,但空间有限,一般只有几MB,并且遵循“先进后出”(LIFO)...
C++内存分配,C++内存
### C/C++内存分配详解:堆、栈、数据段及其他 #### 一、C语言中的内存区域划分 在C语言中,程序运行时使用的内存主要分为以下几个区域: 1. **栈区**:由编译器自动分配和释放,主要用于存储函数调用时的局部...
《全面介绍Windows内存管理机制及C++内存分配实例》 在计算机编程中,尤其是在Windows环境和C++语言中,理解内存管理机制至关重要。这不仅关乎程序的效率,更关乎程序的稳定性和安全性。本文旨在深入解析Windows...
《全面介绍Windows内存管理机制及C++内存分配》 在编程世界中,理解Windows内存管理机制和C++的内存分配方式至关重要。这篇文章旨在提供一个全面的概述,帮助开发者有效地使用这些工具,避免常见问题,如内存泄漏和...
#### 三、C++内存分配实例 理解了Windows内存管理的基本概念之后,我们可以进一步探索如何在C++中有效管理内存。 ##### C++内存分配函数 - **`malloc()`**:动态分配内存的标准库函数。 - **`new`**:C++中用于...
C++的内存分配机制是程序设计中的重要概念,它涉及到程序如何有效地管理和使用内存资源。在C++中,内存主要分为三个区域进行分配:静态存储区、栈区和堆区。 1. 静态存储区分配:这部分内存主要用于存储全局变量和...
以下是对C和C++内存分配的详细讲解: 1. 栈(Stack): 栈是程序运行时最常用的一块内存区域,由编译器自动分配和释放。它用于存储函数调用时的局部变量、函数参数以及返回地址。栈内存的分配速度快,但空间有限,...
本文主要讨论的是C++中内存分配的几个关键知识点,包括内存区域、分配方式、管理方式以及常见的内存错误及其对策。 首先,C++中的内存分为五个主要区域: 1. 栈(Stack):这是由编译器自动管理的区域,用于存储...
C++内存管理是编程中至关重要的一环,涉及程序的稳定性和效率。在这篇文章中,我们将深入探讨三种主要的内存分配方式:new、malloc 和 GlobalAlloc。 首先,让我们了解内存分配的三种基本类型: 1. 静态存储区域...