2015-10-14 46 views
1

我試圖將某些東西移植到Linux。 我的原代碼(對於RTOS)的樣子:Linux - 獲取線程的堆棧內存的開始和結束

int stackSize = 4*1024; 
void* stack = malloc(stackSize); 
int thread = create_thread(stack, FuncToRun) 

後來棧的stackSize是由垃圾收集器使用,並得到一些線程統計。

現在,我該如何將上面的代碼轉換爲Linux?

+0

pthread_create的使用與非空屬性參數。 –

+0

我的意思是,通常你不需要在Linux上分配堆棧,系統會自動進行分配。但如果你想要的話,該設施就在那裏。 –

回答

1

你應該使用的Pthread:

int stackSize = 4*1024; 

pthread_attr_t atrib_thread; 
pthread_attr_init(&atrib_thread); 
pthread_attr_setstacksize(&atrib_thread,stackSize); 

pthread_t my_thread; 
pthread_create(&my_thread,&atrib_thread,FuncToRun,NULL); 

http://www.manpagez.com/man/3/pthread_attr/

http://www.manpagez.com/man/3/pthread_create/

+0

So void * stack = malloc(stackSize);由stack = pthread_attr_getstackaddr(my_thread)替換? (以便我可以找到堆棧開始的位置) – Dragos

+0

@Dragos你可以得到這個地址,但參數是atrib_thread – amchacon

+0

無論如何,你不需要在Linux中設置StackSize,你可以讓System Defaults – amchacon