【发布时间】: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
在我的程序中,我想使用更大的堆栈大小来防止堆栈溢出;我想在这里确认的是,通过使用较大的堆栈大小,我不会消耗更多的物理内存,而只会消耗更大的虚拟地址。这是正确的吗?
【问题讨论】: