我正在寻找linux内核中堆栈的良好描述,但我发现很难找到任何有用的东西.
我知道大多数系统的堆栈限制为4k,其他系统的堆栈限制为8k.我假设每个内核线程/下半部分都有自己的堆栈.我也听说如果一个中断发生,它会使用当前线程的堆栈,但是我找不到任何关于这个的文档.我正在寻找的是如何分配堆栈,如果有任何好的调试例程(我怀疑特定问题的堆栈溢出,我想知道是否有可能将内核编译为警察堆栈大小等).
如果我有两个静态链接的模块.一个模块的module_init函数依赖于已经运行的另一个模块的module_init函数.有没有办法强制一个模块在另一个模块之前加载?
另外,第一个模块的init函数是否可以在调用第二个模块之前完成?
最后,如果上面的答案为NO,那么同步两个模块init调用的推荐方法是什么,以确保我不会遇到问题?
通常,在宏中,您会看到人们使用a do { ... } while(0)来吞下分号.我刚刚遇到了一个他们使用的例子({ ... }),它似乎不仅吞下了分号,而且似乎也允许你返回一个值:
#define NEW_MACRO() ({ int x = 1; int y = 2; x+y; })
if(1)
val = NEW_MACRO();
else
printf("this never prints");`
Run Code Online (Sandbox Code Playgroud)
val会出来3.我找不到任何关于它的文档,所以我对它有点警惕.这种方法有什么问题吗?