提问人:Edward Garemo 提问时间:1/8/2020 最后编辑:curiousguyEdward Garemo 更新时间:1/23/2020 访问量:375
线程具有相同的虚拟内存空间,但堆栈不同?堆栈在哪里?
Threads have the same virtual memory space, but different stacks? Where are the stacks?
问:
程序的运行时堆栈存储为虚拟内存的一部分,从系统 Y 上的地址 X 开始(不考虑随机化)。当创建一个具有自己独立堆栈的新线程时,它存储在哪里?(线程共享其虚拟内存)
答:
0赞
Jin-oh Kang
1/23/2020
#1
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
__drv_aliasesMem LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
uintptr_t _beginthread( // NATIVE CODE
void( __cdecl *start_address )( void * ),
unsigned stack_size,
void *arglist
);
int pthread_attr_setstacksize(pthread_attr_t *attr, size_t stacksize);
Thread(ThreadGroup group, Runnable target, String name, long stackSize)
在线程启动之前,操作系统会为要执行的新线程分配内存(就像 一样)。一些系统还提供间隙(“保护页”),以便堆栈不会相互碰撞。它们的存储位置取决于平台,但通常后续线程的堆栈可能分配在与主线程不同的区域中。对于 Linux,这由 C 库处理,并使用 plain 来分配它们 AFAIK。malloc
mmap
评论