How to measure the stack size of a process?

后端 未结 2 465
离开以前
离开以前 2021-01-12 02:44

How do I find the stack size of a process ? /proc/5848/status gives me VmStk but this doesnt change

No matter how much ever while loop and recursion I do in my test

相关标签:
2条回答
  • 2021-01-12 03:03

    Maybe you just want to get the address map of some process. For process 1234, read sequentially the /proc/1234/maps pseudo-file. For your own process, read /proc/self/maps

    Try

     cat /proc/self/maps
    

    to get a feeling of it (the above command displays the address map of the cat process executing it).

    Read proc(5) man page for details.

    You might also be interested by process limits, e.g. getrlimit(2) and related syscalls.

    I am not sure that stack size has some precise sense, notably for multi-threaded processes.

    Maybe you are interested in mmap(2)-ed segments with MAP_GROWSDOWN.

    0 讨论(0)
  • 2021-01-12 03:12

    There really is no such thing as the "stack size of a process" on Linux. Processes have a starting stack, but as you see, they rarely allocate much from the standard stack. Instead, processes just allocate generic memory from the operating system and use it as a stack. So there's no way for the OS to know -- that detail is only visible from inside the process.

    A typical, modern OS may have a stack size limit of 8MB imposed by the operating system. Yet processes routinely allocate much larger objects on their stack. That's because the application is using a stack that is purely application-managed and not a stack as far as the OS is concerned.

    This is always true for multi-threaded processes. For single-threaded processes, it's possible they are actually just using very, very little stack.

    0 讨论(0)
提交回复
热议问题