【问题标题】:The memory layout of a multithreaded process多线程进程的内存布局
【发布时间】:2013-08-11 12:50:20
【问题描述】:

好吧,我知道所有向上增长的线程都有一个共同的堆,并且我们为每个向下增长的线程都有堆栈(真的是这样,堆栈向下增长还是只是一个简单的视图? )。我什至在某处读到堆栈可以成为堆空间的一部分。
这些堆栈是如何放置的?一个高于另一个?如果顶部的堆栈溢出并试图写入它下面的堆栈会发生什么?真的是这样吗? 请详细查看。

【问题讨论】:

    标签: linux memory memory-layout


    【解决方案1】:

    我刚刚在交互式解释器中用一个简短的 Python“程序”对其进行了测试:

    import threading
    import time
    def d(): time.sleep(120)
    t = [threading.Thread(target=d) for _ in range(250)]
    for i in t: i.start()
    

    然后我按下^Z 并查看了此过程的相应/proc/.../maps 文件。

    它告诉我

    00048000-00049000 ---p 00000000 00:00 0
    00049000-00848000 rw-p 00000000 00:00 0          [stack:28625]
    00848000-00849000 ---p 00000000 00:00 0
    00849000-01048000 rw-p 00000000 00:00 0          [stack:28624]
    01048000-01049000 ---p 00000000 00:00 0
    01049000-01848000 rw-p 00000000 00:00 0          [stack:28623]
    01848000-01849000 ---p 00000000 00:00 0
    01849000-02048000 rw-p 00000000 00:00 0          [stack:28622]
    ...
    47700000-47701000 ---p 00000000 00:00 0
    47701000-47f00000 rw-p 00000000 00:00 0          [stack:28483]
    47f00000-47f01000 ---p 00000000 00:00 0
    47f01000-48700000 rw-p 00000000 00:00 0          [stack:28482]
    ...
    bd777000-bd778000 ---p 00000000 00:00 0
    bd778000-bdf77000 rw-p 00000000 00:00 0          [stack:28638]
    bdf77000-bdf78000 ---p 00000000 00:00 0
    bdf78000-be777000 rw-p 00000000 00:00 0          [stack:28639]
    be777000-be778000 ---p 00000000 00:00 0
    be778000-bef77000 rw-p 00000000 00:00 0          [stack:28640]
    bef77000-bef78000 ---p 00000000 00:00 0
    bef78000-bf777000 rw-p 00000000 00:00 0          [stack:28641]
    bf85c000-bf87d000 rw-p 00000000 00:00 0          [stack]
    

    这表明我已经怀疑:堆栈分配的相对距离(希望)足够大。

    堆栈的相对距离为 8 MiB(这是默认值;可以设置为其他值),顶部的一页受到保护以检测堆栈溢出。

    底部的那个是“主”堆栈;它可以 - 在这个例子中 - 增长直到达到下一个。

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2010-12-09
      • 2011-09-29
      • 2023-03-22
      • 1970-01-01
      • 2010-12-30
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多