堆和栈是系统给linux 进程堆栈分配的虚拟空间吗

没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!进程空间分配和堆栈大小 - IvanB.G.Liu - 博客园
1. Linux中进程空间的分配情况如下:
从上图可以看出,进程的空间分配:与进程相关的数据结构(页表、内核栈、task) ---& 物理内存 ---& 内核代码和数据&&---& &用户栈 &---& 共享库的内存映射区 ---& 运行时堆 ---&未初始化数据段.bss&---& &已初始化数据段.data &---& &代码段.text
2. 进程的堆栈大小:
&32位Windows,一个进程栈的默认大小是1M,在vs的编译属性可以修改程序运行时进程的栈大小。
&Linux下进程栈的默认大小是10M,可以通过 ulimit -s查看并修改默认栈大小。
&默认一个线程要预留1M左右的栈大小,所以进程中有N个线程时,Windows下大概有N*M的栈大小。
&堆的大小理论上大概等于进程虚拟空间大小-内核虚拟内存大小。windows下,进程的高位2G留给内核,低位2G留给用户,所以进程堆的大小小于2G。Linux下,进程的高位1G留给内核,低位3G留给用户,所以进程堆大小小于3G。
3. 进程的最大线程数:
&32位windows下,一个进程空间4G,内核占2G,留给用户只有2G,一个线程默认栈是1M,所以一个进程最大开2048个线程。当然内存不会完全拿来做线程的栈,所以最大线程数实际值要小于2048,大概2000个。
&32位Linux下,一个进程空间4G,内核占1G,用户留3G,一个线程默认8M,所以最多380个左右线程。(ps:ulimit -a 查看电脑的最大进程数,大概7000多个)
阅读(...) 评论()没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!一个进程的堆和栈有多大_百度知道
一个进程的堆和栈有多大
我有更好的答案
栈是线程的,不是进程的是一个进程一个堆,一个线程一个栈吗堆≈虚拟内存大小-1GB栈通常为4MB下面是一些说明文件:Visual C++ 编译器选项 /F(设置堆栈大小) 请参见
发送反馈意见 设置程序堆栈大小(以字节为单位)。/F[ ]number参数number 堆栈大小(以字节为单位)。备注如果不使用此选项,堆栈大小默认为 1 MB。number 参数可以用十进制或 C 语言表示法表示。参数的范围可以在 1 到链接器接受的最大堆栈大小之间。链接器将指定值向上舍入为最接近的 4 个字节。/F 和 number 之间的空格可选的。
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 进程栈 的文章

 

随机推荐