关于当前宏在Linux内核中的工作(我指的是ARM架构)
当前宏的代码:
return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
这意味着 struct thread_info
位于栈顶?
这是来自 linux 内核开发第 3 版:
struct thread_info
位于栈底(对于向下增长的栈)和栈顶(对于向上增长的栈)。
这个 struct thread_info
是如何防止被覆盖的?
最佳答案
THREAD_SIZE
是一个 2 的幂的常量,它给出了为线程堆栈分配的内存量。
- 表达式
~(THREAD_SIZE - 1)
然后给出了一个位掩码来去除实际的堆栈地址。例如。对于 8 kB 堆栈,它将是 0xffffff00。
通过按位取堆栈指针值,我们得到分配给堆栈的最低地址。
堆栈指针对于获取线程信息很有用,因为每个线程总是有自己的堆栈。
关于c - Linux 内核 : Current macro working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348399/