【问题标题】:How does stack size of pthread affects memory usage?pthread 的堆栈大小如何影响内存使用?
【发布时间】:2015-03-26 15:13:41
【问题描述】:

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

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

pmap 命令的部分结果[stack with size 5M]:

00007f97f8b52000 7172K rw--- [匿名]

pmap 命令的部分结果[stack with size 8M]:

00007f8784606000 10244K rw--- [匿名]

top 命令的部分结果[stack with size 5M]:

已使用虚拟资源交换

 25160   7236      0   7236

top 命令的部分结果[stack with size 8M]:

已使用虚拟资源交换

 22088   7196      0   7196

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

【问题讨论】:

    标签: c pthreads libc


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2018-05-23
      • 2020-04-27
      相关资源
      最近更新 更多