>>>>> On Wed, 04 Dec 2013 10:48:11 +0900, YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> said:
>>> Having 136 thousand frames during GC is not unheard of.
>> (/ 8720000.0 (* 136 1000))
>> 64.11764705882354
>> If each frame consumes more than 64 bytes, then it will use up
>> 8720000B stack space.
> FWIW, the default compiler for Xcode 4.0.2 on Mac OS X 10.6 with the
> -O2 option seems to consume 64 bytes for each mark_object frame:
> i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
> _mark_object:
> 00000000000008a0 pushq %rbp
> 00000000000008a1 movq %rsp, %rbp
> 00000000000008a4 movq %rbx, 0xffffffffffffffd8(%rbp)
> 00000000000008a8 movq %r12, 0xffffffffffffffe0(%rbp)
> 00000000000008ac movq %r13, 0xffffffffffffffe8(%rbp)
> 00000000000008b0 movq %r14, 0xfffffffffffffff0(%rbp)
> 00000000000008b4 movq %r15, 0xfffffffffffffff8(%rbp)
> 00000000000008b8 subq $0x40, %rsp
> And the one for Xcode 5.0.2 on OS X 10.9 with -O4 does 24 bytes:
> Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
> _mark_object:
> 0000000000005c70 pushq %rbp
> 0000000000005c71 movq %rsp, %rbp
> 0000000000005c74 pushq %r15
> 0000000000005c76 pushq %r14
> 0000000000005c78 pushq %r13
> 0000000000005c7a pushq %r12
> 0000000000005c7c pushq %rbx
> 0000000000005c7d subq $0x18, %rsp
I forgot to count the pushq instructions. The correct value would be
72 bytes for each mark_object frame in both cases.
YAMAMOTO Mitsuharu
mituharu@math.s.chiba-u.ac.jp