ach*_*ora 5 c embedded multithreading operating-system
在阅读线程共享的所有内容的答案时,我偶然发现了"调用堆栈"这个术语.虽然我知道线程有自己的堆栈而不与其他线程共享,但我不明白什么是调用堆栈就线程而言意味着什么.我看到了一些答案,但不是很清楚.请详细说明调用堆栈的含义以及它在多任务处理中与堆栈的区别.问候
小智 3
请澄清调用堆栈的含义以及它与多任务处理上下文中的堆栈有何不同。
区别很微妙,但这就是我理解它的方式。人们通常可以互换使用它们,但调用堆栈只是一种数据结构。它描述了一系列函数调用以及各种相关状态,例如局部变量的值、返回状态等。
堆栈也是一种数据结构,但它最终是一个内存分配器。它将为线程分配的内存池用于诸如调用堆栈之类的事情,并且具有非常简单、恒定时间、对称的分配push和pop释放内存的风格。
粗略地说,您可能会将其视为std::vector和之间的关系std::allocator。std::vector严格来说是一种数据结构。std::allocator为其分配内存(通常确实涉及幕后的数据结构,但该数据结构仅用于内存管理)。但std::vector不一定非要使用std::allocator。
从概念上讲,调用堆栈实际上不必使用堆栈来分配内存。实际上,很难找到一个能够做到这一点的编译器。例如,调用堆栈实际上可以使用堆而不是堆栈。实际上,每次它只想为函数调用推送一个参数时,它可能都需要线性时间内存分配。这将是可怕的,但它与调用堆栈的概念并不矛盾。
通常,调用堆栈使用线程本地堆栈来分配内存,因为它实用、高效,符合预期的分配/释放的 LIFO 性质,并允许每个线程拥有自己的内存空间(减轻与共享内存访问相关的瓶颈)。