C pthread的堆栈大小如何影响内存使用?
关于使用C pthread的堆栈大小如何影响内存使用?,c,pthreads,libc,C,Pthreads,Libc,关于使用pthread\u attr\u setstacksize()设置pthread的堆栈大小,我有一个问题: 据我所知,pthread的堆栈位于其创建进程的匿名mmapped区域。当我将线程的堆栈大小分别设置为5M和8M时,我发现它确实会影响mmapped区域的大小,但它们使用(几乎)相同数量的物理内存: pmap命令[尺寸为5M的堆栈]的部分结果: 00007f97f8b52000 7172K rw---[anon] pmap命令[大小为8M的堆栈]的部分结果: 00007f878460
pthread\u attr\u setstacksize()
设置pthread的堆栈大小,我有一个问题:
据我所知,pthread的堆栈位于其创建进程的匿名mmapped区域。当我将线程的堆栈大小分别设置为5M和8M时,我发现它确实会影响mmapped区域的大小,但它们使用(几乎)相同数量的物理内存:
pmap命令[尺寸为5M的堆栈]的部分结果:
00007f97f8b52000 7172K rw---[anon]
pmap命令[大小为8M的堆栈]的部分结果:
00007f8784606000 10244K rw---[anon]
top命令的部分结果[尺寸为5M的堆栈]:
使用虚拟资源交换
top命令[大小为8M的堆栈]的部分结果:
使用虚拟资源交换
在我的程序中,我想使用更大的堆栈大小来防止堆栈溢出;这里我想确认的是,通过使用较大的堆栈大小,我不会消耗更多的物理内存,只会消耗更大的虚拟地址。这是否正确?如果您需要更大的堆栈大小来防止溢出,这意味着在某个时候您实际上将使用更大的大小(即,您的堆栈将比默认允许的更深) 在这种情况下,您的程序可能会在默认堆栈大小的情况下崩溃,此时它会将另一个页面分配给其地址空间。因此,在某种意义上,它可以使用更多的物理内存 然而,分配给进程的页面中有多少实际上一次驻留在内存中,这取决于您的操作系统、内存压力、其他进程等
25160 7236 0 7236
22088 7196 0 7196