目前我正在阅读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;
}
你能解释一下它对我的意义吗?
答案 0 :(得分:1)
只需向上滚动一些行:http://jcomeau.unternet.net/src/ramdisk/RAMDISK.C
在引用代码之前,有一个fatEntries和comment的计算:
//
// 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将被选为磁盘格式。如果无法使用FAT12中使用的如此短的FAT表来描述RAM磁盘的簇;功能将选择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 MB磁盘; FAT16可以在任何大小的GB ramdisk下工作。