gpt4 book ai didi

澄清本书的解释和源代码 : #define BITCHUNK_BITS (sizeof(bitchunk_t) * CHAR_BIT)

转载 作者:太空宇宙 更新时间:2023-11-04 03:34:05 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com