关于VC/MFC中内存管理、堆、堆栈概念理解收集的几点说明
来源:互联网 发布:linux下搭建ftp服务器 编辑:程序博客网 时间:2024/04/29 01:17
MSDN中的说明:
-----------------------------------------
堆是为程序的内存分配需要而保留的。它是程序代码和堆栈以外的区域。典型的 C 程序使用 malloc 和 free 函数分配和释放堆内存。MFC 的调试版本提供修改版本的 C++ 内置运算符 new 和 delete,以分配和解除分配堆内存中的对象。
使用 new 和 delete 而不是 malloc 和 free 时,可以利用类库的内存管理调试增强功能,此增强功能对于检测内存泄漏可能有用。使用 MFC 的发布版本生成程序时,new 和 delete 运算符的标准版本提供分配和释放内存的有效方式(MFC 的发布版本不提供这些运算符的修改版本)。
请注意,在堆上分配的对象的总大小只受系统可用虚拟内存的限制。
-----------------------------------------
在Window中执行的每一个应用程序都有其自己的内存地址。一部分内存空间用于存放程序代码,一部分内存空间用于存放程序执行期间 创建的变量。创将变量的方法有两种,一种是在堆中,另外一种则在堆栈里。
理解堆的最好的方法是将它看成一个程序随时可以使用的内存块。为了创建堆变量,程序要使用“new”(在C++里)操作符或者malloc”(在C中)例程,它们返回指向变量的指针(堆变量总是通过指针来处理和操作)。最后程序用“delete”(在C++里)操作符或者“free”(在C中)例程来删除或者释放内存空间。而堆栈则不同,它是某个函数被调用后随时可以创建的一小块内存,被用于在函数范围内保存变量(也称为自动变量)。在函数中,任何包含在{}内的代码都有其自己的堆栈。当这个函数或者{}退出时,堆栈以及它包含的所有内容都被摧毁。因此下面的代码是不运行的:
void Myfunction()
{
int i=5;
{
int j=6;
}
int k=i+j;
}
所以本文问题的答案是:使用堆栈(stack)分配本地或者局域变量的地址空间,而用堆(heap)分配大块内存地址或者动态创建对象的情形。例如:
void MyFunction()
{
int i=5; // 堆栈中的本地(自动)变量
int *iArray; // 堆栈中的本地(自动)变量
iArray = new int[10000]; // 这一行代码将在堆中创建10000个元素的数组,由iArray指向其地址
for(int k=0; k<10000; k++)
{
iArray[k] = k+i;
cout<< iArray[k] << "/n";
}
delete iArray; // 从堆中删除或释放数组占用的地址空间,否则将会有内存泄漏
} // 函数结束
注意:iArray 不是一个堆变量。它是一个局部指针变量,指向堆中未命名的一个数组.
自己做的的小站,喜欢网络小说、喜欢读书的朋友欢迎来转一转
- 关于VC/MFC中内存管理、堆、堆栈概念理解收集的几点说明
- 关于mfc CSplitterWnd的几点理解
- 内存中堆栈的理解
- 初学者关于Objective-C 内存管理的几点思考
- 关于Java堆栈的理解与说明
- JVM内存管理,虚拟机堆栈的理解
- 关于C++中new和delete的几点说明
- 关于C++和C中字符串的几点说明
- C++中关于main函数的几点说明
- 关于java中main()方法的几点说明
- C++中关于main函数的几点说明
- 理解c中堆栈的概念
- 关于JAVA中接口的几点理解
- 关于红黑树的几点概念认识
- 关于"堆栈"和"堆"的那点小事
- C#的内存管理:堆栈、托管堆与指针
- C#的内存管理:堆栈、托管堆与指针
- 【转】C#的内存管理:堆栈、托管堆与指针
- Silverlight 2.0 学习笔记——RIAs
- zai struct2 zhong shiyong json
- 用vb进行dll进程注入
- 胡子高级记事本VB版1.093源码
- Notes Of Thinking In Java (1)
- 关于VC/MFC中内存管理、堆、堆栈概念理解收集的几点说明
- 大裂变来了---- 读过的最好一段文章
- C#命名规则
- [转]Windows CE 5.0下16C2550串口芯片驱动硬件FIFO控制Bug分析以及修正方法
- OpenSolaris 2008.11 引导慢问题解决及build 106
- XP下命令及安全
- 中医是迷信和反科学的
- 介绍linux上两种rootkits检测工具: Rootkit Hunter和Chkrootkit
- 对于Spring初学者的学习建议