在函数_beginthread中,第二个参数(stack_size)是什么意思?
堆栈大小在哪里?默认值(0)是什么意思?
答案 0 :(得分:3)
调用堆栈是stack,用于维护有关执行软件的活动函数调用的信息。它也称为执行堆栈,控制堆栈或运行时堆栈。在多线程软件中,每个线程都有自己的调用堆栈。
调用堆栈的主要目的是通过跟踪每个函数调用返回的位置来管理控制流。进行函数调用时,会将新的stack frame推送到该函数的堆栈中。当函数返回时,弹出其堆栈帧,控制流返回到调用者下一条指令的地址。
堆栈帧通常包括:
参数也可以通过CPU寄存器传递,但是存在缺点(即参数数量有限,计算可能需要和寄存器。)
同样,所有局部变量都不会在当前堆栈帧上分配。支持closures的语言要求自由变量在函数返回后继续存在,但当弹出当前堆栈帧并将控制权返回给调用者时,调用堆栈上的本地代理将被释放。
我的观点是参数传递和本地分配由语言和编译器实现决定;你不应该假设它们总是存在于堆栈中。
来自备注部分下的MSDN documentation on _beginthread:
操作系统处理堆栈的分配 _beginthread 或 _beginthreadex 被调用;你不需要通过 线程堆栈的地址到这些函数之一。
此外, stack_size 参数可以为0,在这种情况下是操作系统 使用与为主线程指定的堆栈相同的值。