c - Linux 内核 : Current macro working

标签 c linux-kernel

关于当前宏在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/

相关文章:

python - Numpy CAPI PyArray_新 Visual Studio 警告 C4055

c - 代码行没有进入 de switch-case

linux-kernel - 使用 gdb 进行远程 Linux 内核调试时未命中断点

Linux。内核源代码中的 munlockall()

c - 来自自定义模块的 QNAP TS-639 上的内核错误

c - 我什么时候释放变量decodeSet1?

c - GMP mpz_array_init 是一个过时的函数 - 我们应该如何初始化 mpz 数组?

c - 如何设计一个信号安全的 shell 解释器

linux - Linux字符驱动中多次读取一次写入导致死锁?

c - 从内核空间访问进程堆栈指针