- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 Tanenbaum 的操作系统设计和实现中,第 154 页说位图中的每个 NR_SYS_PROCS(32) 都有一个位。
并且在 minix/kernel/table.c 的末尾,有一个检查以确保启动镜像中的进程数不大于 ipc 掩码:
/* verify that the first chunk of the ipc mask has enough bits to accommodate the processes
* in the image. */
extern int dummy[(BITCHUNK_BITS > NR_BOOT_PROCS - 1) ? 1 : -1];
我正在研究 BITCHUNK_BITS 的大小,认为它等于 32,但它等于 16,正如/minix/kernal/const.h 中所定义的
#define BITCHUNK_BITS (sizeof(bitchunk_t) * CHAR_BIT)
其中 bitchunk_t 是 unsigned short,CHART_BIT 是 8。
既然可以向启动镜像添加更多用户进程,为什么要确保启动镜像中的进程数小于 16 而不是 32?
最佳答案
当某些常量具有错误的值时产生编译时错误只是一个卑鄙的把戏。
如果它们有正确的值, bool 表达式 BITCHUNK_BITS > NR_BOOT_PROCS - 1
将评估为 1,程序将尝试声明一个大小为 1 的虚拟数组。一切正常,数组永远不会被使用。
如果它们有错误的值, bool 表达式 BITCHUNK_BITS > NR_BOOT_PROCS - 1
的计算结果将是 0,程序将尝试故意声明一个大小为 -1 的虚拟数组。这在 C 中是非法的,因此程序永远不会编译。
在现代 C 语言中,您不会使用这种肮脏的技巧,而是使用
_Static_assert( BITCHUNK_BITS > (NR_BOOT_PROCS - 1), "BITCHUNK_BITS too small" );
关于澄清本书的解释和源代码 : #define BITCHUNK_BITS (sizeof(bitchunk_t) * CHAR_BIT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33957439/
在 Tanenbaum 的操作系统设计和实现中,第 154 页说位图中的每个 NR_SYS_PROCS(32) 都有一个位。 并且在 minix/kernel/table.c 的末尾,有一个检查以确保
我是一名优秀的程序员,十分优秀!