对全局变量的内存分配 对全局变量的内存分配,要不要释放的?他是不是每次程序的创建都是开始重新创建还是???什么是堆栈?他和一般的内存区域有什么不同吗?类的实例化的对象变量是什么时候创建内存区域什么时候回收的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 对全局变量的内存分配,要不要释放的?------------------------------------手动申请的,手动释放,系统分配的,不用管char globalA;//系统分配的内存空间,不用管char* globalB;funcA(){globalB = new char[500];//手动申请的,需要手动释放delete[] globalB;char* localB = new char[500];//手动申请的,需要手动释放delete[] localB;//和globalB是否是全局的变量没有关系} 全局变量编译器在处理的时候是放置在程序的数据段的,所以程序在加载的时候,全局变量就已经进行了存在了,它随着程序的退出而删除。而局部变量又叫自动变量,随着某个函数的退出而销毁,是在程序的运行栈内生成的,一般程序的运行栈是1M大小,所以如果局部变量定义很大的数组,程序容易死掉,因为程序运行栈爆了。而 通过malloc和new 申请的是由系统的虚拟内存,规则是,申请了,都要进行释放。否则容易造成内存泄漏,导致系统响应变慢。 加入全局变量的办法(Abbey发表于2004-2-1 1:53:08)第一种办法:假设这个全局变量int MyGlobal在View中使用得最多,于是在View的CPP文件中加入这个变量的声明,然后在StdAfx.h中加入:extern int MyGlobal;第二种办法:在App中加入这个全局变量int MyGlobal(public型,实际已经不是真正意义上的全局变量,而是App的数据成员),然后在需要的地方利用如下代码访问它:CColorApp * pApp = (CColorApp *)AfxGetApp();pApp->MyGlobal = 8888; 如何将项目中的一部分打为DLL 用静态文本控件,实现对话框的伸缩??? 在MFC中如何把CString类型的汉字串转换为对应的16进制 winsocket速度的问题 cab包相对路径问题 使用Evc如何从某个目录下读取一个bmp文件? 请问如何通过VC代码生成GUID? 请问为什么我在程序在 Debug 状态下编译、运行很正常,而在Release 状态下却不行? 请问怎样才可做一个像打印对话框类似的东东,就是那个提示开始打印的那个! 紧急求助:如何在list 控件里动态放入Check Box控件组? 请教 改变按钮上的文字 网络编程!
------------------------------------
手动申请的,手动释放,系统分配的,不用管
char globalA;//系统分配的内存空间,不用管
char* globalB;funcA()
{
globalB = new char[500];//手动申请的,需要手动释放
delete[] globalB;char* localB = new char[500];//手动申请的,需要手动释放
delete[] localB;
//和globalB是否是全局的变量没有关系
}
(Abbey发表于2004-2-1 1:53:08)第一种办法:
假设这个全局变量int MyGlobal在View中使用得最多,于是在View的CPP文件中加入这个变量的声明,然后在StdAfx.h中加入:extern int MyGlobal;第二种办法:
在App中加入这个全局变量int MyGlobal(public型,实际已经不是真正意义上的全局变量,而是App的数据成员),然后在需要的地方利用如下代码访问它:CColorApp * pApp = (CColorApp *)AfxGetApp();
pApp->MyGlobal = 8888;