这样定义的变量是在堆上还是栈上?

wesleyluo 2011-07-19 02:48:02

//定义结构
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都存在?

...全文
265 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
今晚又失眠 2011-07-19
  • 打赏
  • 举报
回复
realloc也是堆上的
信阳毛尖 2011-07-19
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wltg2001 的回复:]
INFO info1; //此时info1中的name,phone是在哪里分配的?
===========
这是在栈里分配的,你可以不用管它,它自己会释放。

pinfo = new INFO;//此时pinfo中的name,phone是指哪里分配的?如果不delete pinfo,pinfo传递到任何地方,name,phone都存在?
============
这是堆里分配的,你用完……
[/Quote]

new或者是malloc都是在堆中分配,用完之后必须要释放掉(delete )
smwhotjay 2011-07-19
  • 打赏
  • 举报
回复
INFO info1; PINFO pinfo;
如果他们代码放在外部..则存放全局静态存储区。
在函数内部存在stack区。

new的malloc的都是heap区

lanneret1234 2011-07-19
  • 打赏
  • 举报
回复
有关程序中变量的内存分配问题
在程序调到内存中后:

由低到高把内存分为:

低------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()

wltg2001 2011-07-19
  • 打赏
  • 举报
回复
INFO info1; //此时info1中的name,phone是在哪里分配的?
===========
这是在栈里分配的,你可以不用管它,它自己会释放。

pinfo = new INFO;//此时pinfo中的name,phone是指哪里分配的?如果不delete pinfo,pinfo传递到任何地方,name,phone都存在?
============
这是堆里分配的,你用完之后要delete掉。不delete掉的话,它始终存在。
wltg2001 2011-07-19
  • 打赏
  • 举报
回复
new出来的变量都是从堆里分配的。

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧