应用程序存在于虚拟内存中, 有一个非常大的堆栈区. 堆栈, 当然, 是用来保存函数调用历史以及所有的由当前活跃的函数创建的自动变量. 内核, 相反, 有一个非常小的堆栈; 它可能小到一个, 4096 字节的页. 你的函数必须与这个内核空间调用链共享这个堆栈. 因此, 声明一个巨大的自动变量从来就不是一个好主意; 如果你需要大的结构, 你应当在调用时间内动态分配.
常常, 当你查看内核 API 时, 你会遇到以双下划线(__)开始的函数名. 这样标志的函数名通常是一个低层的接口组件, 应当小心使用. 本质上讲, 双下划线告诉程序员:" 如果你调用这个函数, 确信你知道你在做什么."
本文讨论了应用程序与内核在虚拟内存中的区别,特别是在堆栈使用上的不同。文章强调了在内核编程中避免使用大型自动变量的重要性,并介绍了如何正确地进行动态分配。此外,还提到了内核API中双下划线命名约定的含义及其使用警告。
1108

被折叠的 条评论
为什么被折叠?



