最近看了Windows核心编程的18章堆栈部分,有些疑惑。请教中ing....

pheonix_wan 2003-04-23 09:38:32
1、它里面讲的堆栈和c++中的所谓的heap和stack到底有什么关系?
2、它里面讲的HeapAlloc()和c++中所谓的new、delete到底有什么关系?

到google上没找到答案。
:)急盼高手解答。
谢。!!!
...全文
40 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
pheonix_wan 2003-04-29
  • 打赏
  • 举报
回复
ding...
pheonix_wan 2003-04-27
  • 打赏
  • 举报
回复
ding
pheonix_wan 2003-04-26
  • 打赏
  • 举报
回复
ding...
lifeequation 2003-04-25
  • 打赏
  • 举报
回复
gz
pheonix_wan 2003-04-25
  • 打赏
  • 举报
回复
奥。我最近写的程序中在开始一个新的线程前用HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(RecvInfo));分配内存。在线程退出前HeapFree(GetProcessHeap(),0,m_pRecvInfo);我的程序偶尔会莫名其妙的退出。不出任何提示。不知是不是跟这个有关。

:)多谢各位解答。
pheonix_wan 2003-04-25
  • 打赏
  • 举报
回复
gz
In355Hz 2003-04-24
  • 打赏
  • 举报
回复
malloc 和 new 都是在堆中(一般是进程的默认堆)分配的,除非被重载。但是它们分配的内存块和 HeapAlloc 的不一样,因为 C/C++ 需要维护这些分配的内存块。

在栈中分配可以用 _alloca ,分配的内存只在调用函数内有效,不用 free

pheonix_wan 2003-04-24
  • 打赏
  • 举报
回复
再顶一下
denghby 2003-04-24
  • 打赏
  • 举报
回复
怎么都是有星的啊
In355Hz 2003-04-24
  • 打赏
  • 举报
回复
1. 可以
2. 除了代码兼容性上,HeapAlloc 和 new 分配没有什么大的区别,如 realdreamer 所说,new 实际上也是调用 HeapAlloc 进行分配的。
pheonix_wan 2003-04-24
  • 打赏
  • 举报
回复
再顶一下
pheonix_wan 2003-04-24
  • 打赏
  • 举报
回复
默认堆栈是1M,能new出来的内存有多大?有些晕....
pheonix_wan 2003-04-24
  • 打赏
  • 举报
回复
:)看了各位的高论,还是有些晕。再顶一下

核心编程中说的堆栈和实际我们new出来的内存是一块区域吗?HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(RecvInfo));这样分配的是默认堆栈的区域。new的是那块区域?我感觉他们是不一样的。
pheonix_wan 2003-04-24
  • 打赏
  • 举报
回复

pheonix_wan 2003-04-24
  • 打赏
  • 举报
回复
再顶一下就散分了 :)
pheonix_wan 2003-04-24
  • 打赏
  • 举报
回复
多谢各位的解答,似乎有些明白。单还有一些问题。

1、默认堆栈可以自动增长吗?
2、如果我在开始一个新的线程前用HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(RecvInfo));分配内存。在线程退出前HeapFree(GetProcessHeap(),0,m_pRecvInfo);这样如果线程被频繁启动,需要频繁切换时会不会有什么问题?还有,这样和线程启动前用new,退出时用delete,进行内存操作有什么区别?

再盼各位高手解答。
谢。!!!
realdreamer 2003-04-24
  • 打赏
  • 举报
回复
再补充:

事实上 new/delete new[]/delete[] malloc/free 在 microsoft c++ 中的实现就是调用 HeapAlloc/HeapFree , 操纵的是 c-runtime heap
finix 2003-04-24
  • 打赏
  • 举报
回复
JennyVenus() :new比较适合小块内存的分配,使用new主要的目的据说是减少内存的浪费
不太同意
realdreamer 2003-04-24
  • 打赏
  • 举报
回复
再补充:

new/delete new[]/delete[] malloc/free 系列平台无关.在任何支持标准C/C++ 的编译器上都可用

HeapAlloc/HeapFree 仅限 WIN32 平台
liuhongyong 2003-04-23
  • 打赏
  • 举报
回复
我是来学习的。看了 JennyVenus所说,收益不小啊。
加载更多回复(9)

16,471

社区成员

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

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

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