如何在MacOS X上找到堆栈的基址和大小?

时间:2010-07-12 17:50:47

标签: unix macos garbage-collection

我正在将一个不精确的垃圾收集器从Windows移植到MacOS X.在它中,它必须扫描堆栈以识别堆中的潜在指针,然后将它们用作GC根。要做到这一点,我需要堆栈的基础以及它的长度。在Windows中,此代码使用类似于此处描述的算法:

Stack and Stack Base Address

如何在Mac OS X上执行此操作?请注意,就目前而言,我只关心主线程。使用此GC的解释器是单线程的,我可以保证其他线程上没有引用./

2 个答案:

答案 0 :(得分:3)

您还可以使用特定于Darwin的函数获取堆栈的总大小和长度:

    pthread_t self = pthread_self();
    void* addr = pthread_get_stackaddr_np(self);
    size_t size = pthread_get_stacksize_np(self);
    printf("addr=%p size=%zx\n", addr, size);

答案 1 :(得分:0)