2015-10-14 108 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