3

I'm using an image manipulation library that throws an exception when I attempt to load images > 4GB in size. It claims to be 64bit, but wouldn't a 64bit library allow loading images larger than that? I think they recompiled their C libraries using a 64 bit memory model/compiler but still used unsigned integers and failed upgrade to use 64 bit types.

Is that a reasonable conclusion?

Edit - As an after-thought can OS memory become so fragemented that allocation of large chunks is no longer possible? (It doesn't work right after a reboot either, but just wondering.) What about under .NET? Can the .NET managed memory become so fragmented that allocation of large chunks fails?

4

2 回答 2

4

这是一个合理的建议,但是确切的原因可能有很多——例如您正在运行什么操作系统,您有多少 RAM / 交换空间?应用程序/操作系统可能不会过度使用虚拟内存,因此您需要 4GB(或更多)的可用 RAM 才能打开映像。

出于兴趣,它似乎是 4GB 边界的明确停止 - 即 3.99GB 图像是否成功,但 4GB 图像失败 - 你说它确实表明在库数据结构中明确使用 32 位大小。

更新

关于你的第二个问题 - 不是真的。几乎所有现代操作系统都使用虚拟内存,因此每个进程都有自己的连续地址空间。进程地址空间中的单个连续区域不需要由连续的物理 RAM 支持,它可以由许多独立的 RAM 物理区域组成,看起来它们是连续的;所以操作系统不需要有一个 4GB 的可用 RAM 块来为您的应用程序提供 4GB 块。

应用程序可能会对其虚拟地址空间进行分段,这样就没有连续的 4GB 区域的空间,但考虑到 64 位地址空间的大小,在您的方案中可能极不可能。

于 2009-07-18T23:54:46.103 回答
1

是的,除非二进制文件格式本身限制了图像的大小。

于 2009-07-19T00:00:13.797 回答