这样定义的变量是在堆上还是栈上? //定义结构typedef struct _info{ char name[20]; char phone[20];}INFO, *PINFO;INFO info1; //此时info1中的name,phone是在哪里分配的?PINFO pinfo;pinfo = new INFO;//此时pinfo中的name,phone是指哪里分配的?如果不delete pinfo,pinfo传递到任何地方,name,phone都存在? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 new出来的变量都是从堆里分配的。 INFO info1; //此时info1中的name,phone是在哪里分配的?===========这是在栈里分配的,你可以不用管它,它自己会释放。pinfo = new INFO;//此时pinfo中的name,phone是指哪里分配的?如果不delete pinfo,pinfo传递到任何地方,name,phone都存在?============这是堆里分配的,你用完之后要delete掉。不delete掉的话,它始终存在。 有关程序中变量的内存分配问题在程序调到内存中后:由低到高把内存分为:低------0系统占用区代码区全程数据区堆区栈区DLL区[有DLL自己的堆栈等]....没有占用区高-----4GB一个程序的运行起来后,其在内存中有5个区域1. 程序代码区这个很简单,代码要执行,肯定要加载进内存, 我们不必关心。2. 文字常量区一般我们这样定义一个字符串时,其是在文字常量区的:char* s1 = "hello, world";char* s2 = "hello, world";if(s1 == s2) printf("s1和s2指向同一个在文字常量区的字符串");这里, s1和s2指向的是同一个字符串3. 静态存储区全局变量,静态变量会放在这个区域,事实上,全局变量也是静态的。以上1,2,3三个区域的内存在程序起来的时候就开辟好了的。4. 栈局部变量就是在栈里的。另外,函数调用时的参数也是在栈里的,这个现在不必关心5. 堆malloc或new出来的内存就是在堆里的,需要程序员自己管理清除。申请、释放内存 C语言 C++语言 Windows 平台 COM IMalloc 接口 BSTR 申请 malloc() new GlobalAlloc() CoTaskMemAlloc() Alloc() SysAllocString() 重新申请 realloc() GlobalReAlloc() CoTaskRealloc() Realloc() SysReAllocString() 释放 free() delete GlobalFree() CoTaskMemFree() Free() SysFreeString() INFO info1; PINFO pinfo;如果他们代码放在外部..则存放全局静态存储区。在函数内部存在stack区。new的malloc的都是heap区 new或者是malloc都是在堆中分配,用完之后必须要释放掉(delete ) DrawTransparentBitmap的使用 回调能否消除类间依赖性 社区的等级星星 三角是怎么算的啊? C++中的过零检测是什么东西? 操作系统的那个系统时钟(托盘区)是怎么做的? 继承的烦恼!!!!!!!!!! 大家都来看看这个问题! 如何定义两个互相引用的类? 我想用VC++6.0开发一个批量打印autocad图纸文件的应用 到底怎么处理VC异常呀?我用try catch用debug方式错误对话框照弹不误用release干脆出错退出 为什么复选框在背景透明时显示的是黑色 关于Hook打印机信息的问题
===========
这是在栈里分配的,你可以不用管它,它自己会释放。pinfo = new INFO;//此时pinfo中的name,phone是指哪里分配的?如果不delete pinfo,pinfo传递到任何地方,name,phone都存在?
============
这是堆里分配的,你用完之后要delete掉。不delete掉的话,它始终存在。
在程序调到内存中后:由低到高把内存分为:低------0系统占用区代码区全程数据区堆区栈区DLL区[有DLL自己的堆栈等]....没有占用区高-----4GB一个程序的运行起来后,其在内存中有5个区域
1. 程序代码区
这个很简单,代码要执行,肯定要加载进内存, 我们不必关心。2. 文字常量区
一般我们这样定义一个字符串时,其是在文字常量区的:
char* s1 = "hello, world";
char* s2 = "hello, world";
if(s1 == s2)
printf("s1和s2指向同一个在文字常量区的字符串");这里, s1和s2指向的是同一个字符串3. 静态存储区
全局变量,静态变量会放在这个区域,事实上,全局变量也是静态的。以上1,2,3三个区域的内存在程序起来的时候就开辟好了的。4. 栈
局部变量就是在栈里的。另外,函数调用时的参数也是在栈里的,这个现在不必关心5. 堆
malloc或new出来的内存就是在堆里的,需要程序员自己管理清除。申请、释放内存
C语言 C++语言 Windows 平台 COM IMalloc 接口 BSTR
申请 malloc() new GlobalAlloc() CoTaskMemAlloc() Alloc() SysAllocString()
重新申请 realloc() GlobalReAlloc() CoTaskRealloc() Realloc() SysReAllocString()
释放 free() delete GlobalFree() CoTaskMemFree() Free() SysFreeString()
如果他们代码放在外部..则存放全局静态存储区。
在函数内部存在stack区。new的malloc的都是heap区
new或者是malloc都是在堆中分配,用完之后必须要释放掉(delete )