首页 > windows堆问题

windows堆问题

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

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

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


首先看图

从下往上数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会扩大

【热门文章】
【热门文章】