windows堆问题

发布于 2022-09-01 05:29:01 字数 191 浏览 18 评论 0

windows核心编程中说的缺省堆到底被操作系统用来干嘛?
默认开辟1mb的大小,多线程无法访问,它有何作用?

还有,一个堆空间的开辟是在程序执行开始时被开辟。。
而对于c++来说,堆空间开辟是new,new必定会调用函数,函数就有栈。

系统是先开辟堆空间,再执行new函数然后向堆空间写入数据的吗?还是其他的顺序?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

傲性难收 2022-09-08 05:29:01

首先看图
clipboard.png

从下往上数4,5分别为stack,heap,空间不够大的时候,是可以扩展的。扩展的方向相反。一个向上生长,一个向下。(就像是背靠背的兄弟)。

就是说,一旦pe被加载,基本布局已定。

这样再来回答你的问题:

-- 缺省堆到底被操作系统用来干嘛?
1. 一个进程可以有多个堆,但是至少要有一个堆,用于new分配内存。反正都要有,os就帮程序员创建,不劳程序员的驾。这样的做法对进程和线程也是。你创建进程的主线程是os帮到做了,程序员不需要管。
--堆空间开辟是new,new必定会调用函数,函数就有栈。
2. new不是开辟堆空间。而是从默认的堆上分配内存给指针。new只能在堆指定的地址空间内分配其中一部分的内存出来。就是说,再怎么new,也不可能出现地址在stack上的,也不可能占用 code and static data ,kernal space 等等的地址的。要按规矩来。

--系统是先开辟堆空间,再执行new函数然后向堆空间写入数据的吗?
3.回头看图。加载pe就已经有了堆空间和栈空间了。和你的new执行多少次无关。但是函数的执行比较深的话,stack会扩大,new的内存多的话,heap会扩大

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文