Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C pthread的堆栈大小如何影响内存使用?_C_Pthreads_Libc - Fatal编程技术网

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