避坑指南:使用 64 位指针处理大型文件

避坑指南:使用 64 位指针处理大型文件

作者:BlogUpdater |  时间:2024-05-24 |  浏览:434 |  评论已关闭 条评论

在如今这个时代,小于 20 GB 的硬盘在人们看来实在是太小了,但要知道,在古老的旧时代,硬盘的容量都是使用 MB 为单位进行计算的,而不是以 GB 为单位。

作为程序开发者,我们需要时刻注意,如今的用户文件可能已经很大了,例如一些视频文件或者数据库文件,它们的大小可能会是几个 G 这样的规模。

这意味着,对于大文件,我们要使用 64 位指针作为偏移量来调用相关的文件处理 API (例如:SetFilePointerEx)。

这还意味着,在处理 WIN32_FIND_DATA 结构体中的 nFileSizeHigh 字段时,也需要小心谨慎。例如,如果你的程序希望筛选出一些小文件,但如果我故意给你一个 4GB 的大文件,如果你只是检查 nFileSizeLow 的话,则你会误认为这是一个小文件。

这还意味着,您不能盲目地将整个文件映射到内存中。许多程序通过将整个文件映射到内存中,然后使用指针遍历y映射后的内存来简化文件解析。

一旦文件大小超过 1.5 GB,这种方法在 32 位计算机上就会崩溃,因为找到这么多连续可用地址空间的几率非常低。您必须将其分段映射或完全使用其他解析方法。

总结

操作系统和应用程序向 64 位版本的演进是一个趋势,我们不能回避,而应该热情的拥抱它,但有时候我们也需要根据实际情况考虑不同的方案。
如果您的应用需要同时覆盖 32 位 和 64 位的机器,则可以选择构建 32 位的版本。
如果您认为目前 64 位操作系统已经普及,32 位的机器已经很少了,则可以直接构建 64 位版本。
最后,拓扑梅尔智慧办公平台 (Topomel Box) 无耻的选择了前者(32 位版本)。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Taxes: Files larger than 4GB》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(TopomelBox)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

标签:

评论已关闭。