#include #include #include #include #include #define panic(str) if (ret != 0) { errno = ret; perror(str); return 1; } void* threadFunction(void*) { int i = 0; printf("variable addr: %p\n", &i); pthread_exit(0); return 0; } int main(int argc, char **argv) { int ret; pthread_attr_t attr; ret = pthread_attr_init(&attr); panic("init"); void* stackAddress; size_t stackSize; ret = pthread_attr_getstack(&attr, &stackAddress, &stackSize); panic("getstack"); printf("stackAddress: %p, stackSize: %lu\n", stackAddress, stackSize); stackSize = PTHREAD_STACK_MIN; ret = posix_memalign(&stackAddress, sysconf(_SC_PAGE_SIZE), stackSize); panic("memalign"); ret = pthread_attr_setstack(&attr, stackAddress, stackSize); panic("setstack"); ret = pthread_attr_getstack(&attr, &stackAddress, &stackSize); panic("getstack"); printf("stackAddress: %p, stackSize: %lu\n", stackAddress, stackSize); pthread_t thread; ret = pthread_create(&thread, &attr, threadFunction, NULL); panic("create"); ret = pthread_join(thread, NULL); panic("join"); ret = pthread_attr_destroy(&attr); panic("destroy"); return 0; }