【发布时间】:2011-11-18 03:36:48
【问题描述】:
目前我正在阅读 Ramdisk 源代码。在 RamDiskFormatDisk 函数中,我遇到了问题。
一段代码如下:
if (fatEntries > 4087) {
fatType = 16;
fatSectorCnt = (fatEntries * 2 + 511) / 512;
fatEntries = fatEntries + fatSectorCnt;
fatSectorCnt = (fatEntries * 2 + 511) / 512;
}
else {
fatType = 12;
fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512;
fatEntries = fatEntries + fatSectorCnt;
fatSectorCnt = (((fatEntries * 3 + 1) / 2) + 511) / 512;
}
你能解释一下它对我的意义吗?
【问题讨论】:
-
您在哪一部分遇到了问题?
-
方程式。为什么 fatSectorCnt 应该这样计算?
-
这个常数4087是来自FAT12格式的限制。 FAT12 不能有超过 4K 条目的 FAT 表。这个数字是 2^12 减去 FAT12 本身的服务数据的几个条目。这是因为 FAT12 中的簇具有 12 位数字。
-
我知道常数限制。我的意思是,算法,为什么要乘以 2 或 3 并进行其他计算
-
(x+511)/512表示“除以 512,向上取整. Similarly with(x+1)/2”。 C 中的整数除法总是截断(丢弃小数点后的任何内容)。我不熟悉 FAT,所以我不知道 *2 和 *3,但似乎每个条目有两个扇区。