0

目前我正在阅读 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;
}

你能解释一下它对我的意义吗?

4

1 回答 1

1

只需向上滚动一些行:http: //jcomeau.unternet.net/src/ramdisk/RAMDISK.C

就在引用代码之前,有一个 fatEntries 和注释的计算:

//
// Calculate number of sectors required for FAT
//
fatEntries =
    (bootSector->bsSectors - bootSector->bsResSectors -
        bootSector->bsRootDirEnts / DIR_ENTRIES_PER_SECTOR) /
            bootSector->bsSecPerClus + 2;

//
// Choose between 12 and 16 bit FAT based on number of clusters we
// need to map
//

而这个功能RamDiskFormatDisk

此例程格式化新磁盘。

因此,基于此函数的(间接)输入中的 RAM 磁盘大小,它将计算 RAMdisk 中有多少扇区(扇区 = 512 字节),然后 - 需要多大的 FAT 表(FatEntries)来描述所有部门。FAT 表中的每个条目描述一个单独的簇,默认值为 2 个扇区 = 1 个簇。

如果簇数少,小FAT表比较好,磁盘格式选择FAT12。如果 RAM 盘的簇不能用 FAT12 中使用的那么短的 FAT 表来描述;功能将选择 FAT32。

实际限制:http ://en.wikipedia.org/wiki/File_Allocation_Table

FAT12 - 最多 4084 个簇 (2^12‑12);32 MB,最大的集群。

FAT16 - 最多 65524 个簇 (2^16‑12);高达 2 GB 的最大集群

因此,FAT12 适合软盘或几 MB ram 磁盘;FAT16 可以在最大 GB ramdisk 的任何大小上工作。

于 2011-11-18T03:46:55.427 回答