2010-07-12 2 views
2

Windows에서 MacOS X로 부정확 한 가비지 컬렉터를 이식하고 있습니다. 스택에서 힙에 대한 잠재적 인 포인터를 식별 한 다음이를 GC 루트로 사용해야합니다. 이 작업을 수행하려면 스택의베이스와 길이가 필요합니다. 내가 어떻게MacOS X에서 스택의 기본 주소와 크기는 어떻게 찾습니까?

Stack and Stack Base Address

그 맥 OS X의 : Windows에서이 코드는 여기에 설명 무슨 유사한 알고리즘을 사용? 지금은 주 스레드 만 신경 쓰고 있습니다. 이 GC를 사용하는 인터프리터는 단일 스레드이므로 다른 스레드에는 참조가 없다는 것을 보증 할 수 있습니다./

답변

0

Hans Boehm's conservative GC for C은 MacOS X에서 실행되며 오픈 소스입니다. 따라서 GC의 소스 코드를 살펴봄으로써 스택의 위치를 ​​파악할 수 있습니다.

또는 호출 코드를 얼마나 제어 하느냐에 따라 로컬 변수의 주소를 "높음"(예 : main() 함수 또는 해당 MacOS X와 ​​동일하거나 관련 함수의 시작 함수에서 가져올 수 있음) 실). 아마도 은 스레드 생성시 스택 주소와 크기를으로 선택할 수 있습니다 (Posix 스레드의 경우이 작업은 pthread_attr_setstack() - MacOS X에서 Posix 스레드를 사용할 수 있음).

또한 다윈 특정 기능을 스택의 전체 크기와 길이를 얻을 수
2

:

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); 
관련 문제