我正在将一个不精确的垃圾收集器从Windows移植到MacOS X.在它中,它必须扫描堆栈以识别堆中的潜在指针,然后将它们用作GC根。要做到这一点,我需要堆栈的基础以及它的长度。在Windows中,此代码使用类似于此处描述的算法:
如何在Mac OS X上执行此操作?请注意,就目前而言,我只关心主线程。使用此GC的解释器是单线程的,我可以保证其他线程上没有引用./
答案 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)