请问一个线程可以使用堆里面的多少内存,栈里的多少内存?

babam 2005-07-11 10:12:14
在某文章中看见说只能开1m内存,具体试的时候,好像不止,不知道有什么限制.
环境为vc6 win2k
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
babam 2005-07-12
  • 打赏
  • 举报
回复
Zhymax(蓝点) 说的线程堆栈以1m为边界分配的意思是?
我只能在堆里new 1m内存?
babam 2005-07-12
  • 打赏
  • 举报
回复
知道了 ,谢谢大家
idAnts 2005-07-12
  • 打赏
  • 举报
回复
不是说new 1M就蹦,是说这样:
void fun()
{
char buffer[1024 * 1024];
}

就崩了,new出来的是在堆上(heap),不是栈上(stack)
newbiestar 2005-07-12
  • 打赏
  • 举报
回复
默认情况下栈的大小大概是1M(的确是这个值,MSDN里面说了,默认值就是这个),不过单线程情况下的栈大小是可以通过链接器设置修改的,不过cl调用link的时候也可以传递这个参数

cl/?给出的是要求/F<NUM>设置堆栈大小(其实就是栈。另外,如果你自己调用link链接的话,就需要靠/STACK参数来指定栈的大小了)

而多线程的程序除了主线程要靠链接选项设置,其他的都是由CreateThread创建的线程,CreateThread就有一个参数给你指定栈的大小。

另外,关于堆,这个东西由你自己管理,基本上可以说很大(算上了Virtual Memory的话),大概有2G(这个还取决于你的Pagefile.sys的设置,如果Pagefile.sys设置不够大的话,只能用new慢慢分配,这样Pagefile.sys自己会在超过范围的时候偷偷增大)。

另外,由于堆其实是进程占有的,所以所有thread都是用同一块堆,thread a分配的多了,thread b能分配的就少了……
Zhymax 2005-07-11
  • 打赏
  • 举报
回复
windows中线程堆栈是以1m为边界分配的;

最大范围应该是系统能寻址的虚拟地址范围,32位机器是4G;

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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