gpt4 book ai didi

c - pthread 的堆栈大小如何影响内存使用?

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:52 25 4
gpt4 key购买 nike

我有一个关于使用 pthread_attr_setstacksize() 设置 pthread 堆栈大小的问题:

据我了解,pthread 的堆栈位于其创建进程的匿名映射区域。当我分别将线程的堆栈大小设置为 5M 和 8M 时,我发现它确实影响了映射区域的大小,但它们都使用(几乎)相同数量的物理内存:

pmap 命令的部分结果[大小为 5M 的堆栈]:

00007f97f8b52000 7172K rw--- [ anon ]

pmap 命令的部分结果[大小为 8M 的堆栈]:

00007f8784606000 10244K rw--- [ anon ]

top命令的部分结果[大小为5M的堆栈]:

VIRT RES SWAP USED

 25160   7236      0   7236

top 命令的部分结果[大小为 8M 的堆栈]:

VIRT RES SWAP USED

 22088   7196      0   7196

在我的程序中,我想使用更大的堆栈大小来防止堆栈溢出;我想在这里确认的是,通过使用大堆栈大小,我不会消耗更多的物理内存,而只会消耗更大的虚拟地址。这是正确的吗?

最佳答案

如果您需要更大的堆栈大小来防止溢出,这意味着在某些时候您实际上会使用更大的大小(即,您的堆栈将比默认允许的更深)。

在这种情况下,在某些情况下,您的程序可能会因默认堆栈大小而崩溃,因为它会将另一个页面分配给其地址空间。因此,从某种意义上说,它可以使用更多的物理内存。

然而,分配给您的进程的页面有多少实际上同时驻留在内存中,这取决于您的操作系统、内存压力、其他进程等。

关于c - pthread 的堆栈大小如何影响内存使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29282143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com